程序员’s Corner

在Apple II系列上加载和保存图形屏幕第2部分

虽然上个月的文章介绍了一些漂亮的图形操作技术,但我错过了一些关于使我们的程序正常工作必须进行的非常重要的事项的要点。
每个Apple II都有一些内置在机器rom中的调用,这些调用在被调用时执行我们通常必须为其分配基本语句的任务。程序的磁盘访问线就是一个很好的例子。
让我们从程序中提取以下几行,并使用调用将其重写。这显然不会使程序更短,但确实会使程序更清晰,更易于处理。

 35 REM **
40 REM SET DEFAULTS
45 REM **
50 D$=CHR$(13)+CHR$(4)
55 SL=6 : DR=1 : MD=0
 600 REM *
602 REM CATALOG THE CURRENT DISK
604 REM *
610 HOME
615 PRINT D$;”CATALOG , S”;SL;”,D”;DR
620 PRINT
625 PRINT “PRESS ANY KEY TO CONTINUE
630 A$=INKEY$
635 IF MD=1 THEN 302
640 IF MD=2 THEN 502
 700 REM *
702 REM DRIVE AND SLOT SELECTOR
704 REM *
710 HOME
720 PRINT “SLOT OF DISK DRIVE : “;
722 S$=INKEY$
724 S$=”4” THEN 722
726 ST=VAL(S$)
728 IF ST<3 OR ST>7 THEN 722
730 SL=ST
740 PRINT
742 PRINT “SELECT DRIVE (1/2)”
744 DT$=INKEY$
746 DT=VAL(DT$)
748 IF DT<1 OR DT>2 THEN 744
致电A.P.P.L.E. 2002年7月Page 035 of 38
750 DR=DT
760 GOTO 70

尽管新程序的第30-55行是可以的,但我们可以将600到640行更改为以下代码:

600 REM *
602 REM CATALOG THE CURRENT DISK
604 REM *
610 HOME
615 CALL 42350
620 PRINT
625 PRINT “PRESS ANY KEY TO CONTINUE
630 A$=INKEY$
635 IF MD=1 THEN 302
640 IF MD=2 THEN 502

注意行615。这一调用通过使用驱动器和插槽的默认值(如内存中)自动完成了所有操作。对于插槽和驱动器的分配,可以完成以下操作,如下线700至760所示。

 700 REM *
702 REM DRIVE AND SLOT SELECTOR
704 REM *
710 HOME
720 PRINT “SLOT OF DISK DRIVE : “;
722 S$=INKEY$
724 S$=”4” THEN 722
726 ST=VAL(S$)
728 IF ST<3 OR ST>7 THEN 722
730 SL=ST
740 PRINT
742 PRINT “SELECT DRIVE (1/2)”
744 DT$=INKEY$
746 DT=VAL(DT$)
748 IF DT<1 OR DT>2 THEN 744
750 DR=DT
755 POKE 43626,SL : POKE 43624,DR
760 GOTO 70

注意行755。插槽和驱动器都已插入内存,以供第615行的调用使用。此设置也可以由其他命令使用。

我们在上个月的文章中没有提到的另一点是关于图形页面的访问。看一下下面的代码行:

 360 REM **
370 REM LOAD TO PAGE 1
380 REM **
382 POKE 16304,0
384 POKE 16302,0
386 POKE 16300,0
388 POKE 16297,0
390 PRINT D$;”BLOAD “;NA$;”,A$2000 ,S”;SL;”, D”;DR
400 A$=INKEY$
410 GOTO 70

第382行到第388行包含允许访问图形页面的戳记,以便您可以执行文本命令,而不必每次都重新绘制屏幕。对于程序435-447中的行也是如此。

两组线之间的区别在于,将第1页拨至16300,将第2页拨至16299。通过将0拨入两个地址之一,可以轻松地在两个图形页之间切换。

下表显示了有关这些行中使用的戳的一些详细信息:

 POKE          Explanation
 ============= =================
 POKE 16304,0  Enter graphics mode
 POKE 16302,0  Enter full graphics mode
 POKE 16301,0  Set the screen for both text and graphics
 POKE 16300,0  Go to Hi-Res page 1
 POKE 16299,0  Go to Hi-Res page 2
 POKE 16298,0  Set the graphics more to low resolution
 POKE 16297,0  Set the graphics mode to high resolution

结合使用这些戳记和所示的其他技术,您应该能够充分控制图形屏幕。

在我们的程序正常运行之前,需要对其进行一些小的更正,但是该程序正在进行中。记下程序的编写方式。注意模块化样式。这是最好的使用方式,因为多年来和许多程序中都会反复使用许多例程。错误模块和驱动控制模块以这种方式特别有用。

下个月,我们将研究Applesoft中的数据文件访问例程以及一些排序例程,这些例程可让您对数据列表进行排序。

请关注并喜欢我们:

关于作者

比尔·马滕斯

苹果。董事会主席兼俱乐部主席-Bill为创始人Val J.Golding和A.P.P.L.E.工作从1981年到1982年。1999年,他开始对A.P.P.L.E.分发和出售的材料进行存档。 Bill曾在东京从事金融行业,并以他的名字从事过20多个大型办公基础设施项目。 2001年3月,他退休,写书,花更多时间追求个人兴趣。作为用户小组的主席,Bill负责Call-A.P.P.L.E。的分发。杂志以及本网站的组织。比尔目前居住在日本东京和华盛顿州谢尔顿,两地之间的时间不一样。