К ВНИМАНИЮ НАЧИНАЮЩИХ ПРОГРАММИСТОВ!

Наконец-то вышла из печати первая и единственная в своем роде книжка, которая полностью посвящена нашей любимой ПЭВМ "АГАТ" (Мымрин М.П., Конструкция, применение, программирование и ремонт ПЭВМ "АГАТ". М.:Машиностроение, 1990. - 304 с.: ил.). Наконец-то мы можем не бегать к знакомым, счастливым обладателям принципиальной схемы АГАТа, которая была засекречена еще перед началом серийного выпуска машины. Сейчас эта схема полностью опубликована в этой книге, хотя узнать как называется, например, микросхема D87 схемы модуля памяти и интерфейса мы можем только у тех же счастливых знакомых, потому что в издании автор указал типы микросхем только для платы процессора (наверно из-за того, что во всех предыдущих схемах платы процессора саму микросхему процессора называли ни как иначе, как "микросхема микропроцессора", сдыдясь назвать ее просто 6502).

Однако самым примечательным в этой книге является громадное количество ошибок, пропусков, перестановок и неточностей. Правда, в издательстве есть такая должность "корректор" (это слово в словаре С.И.Ожегова переводится как "Работник издательства, газеты или типографии, читающий корректуру" - "исправление типографских ошибок на оттиске набора, а также самый оттиск")... Можно понять, что техническая терминология может запутать наборщика, можно посетовать на рукопись, хотя рукописи принимаются только напечатанной на машинке, однако от сетований ошибок меньше не становится, поэтому я считаю своим долгом проинформировать пользователей этой книги о тех ошибках, которые могут запутать начинающих программистов, а то и отпугнуть их от компьютера, ведь человек должен "прогнать" программы, напечатанные в книге. А если они не пойдут? Тогда он может спросить: "А почему?". И некому будет ответить...

Должен заранее предупредить, что большинство маленьких программ на ассемблере, представленных в этой книге, идет только из системного монитора, где другие адреса подпрограммы вывода на экран.

Итак,

ошибки, выявленные при просмотре книги.

1. стр.23, 3-й абзац снизу и далее.

Признаком "теплого" старта является результат логической операции "исключающее или" (EOR) ячеек ¤3F3 и ¤3F4, который должен быть равен "A5" (если не A5, то выполняется холодный старт), следовательно при адреса запуска системного монитора ¤FF69 содержимое ячейки ¤3F2 = ¤69, ¤3F3 = ¤FF, а в "ячейку индикации питания" ¤3F4 - не число ¤A5, как указано в книге, а ¤5A).

2. стр.31.

В программе COPY (известна как FID, COPYFLE и др.) нужно сообщить номер разъема, к которому подключен дисковод. Обычно это номер 3, но может быть любой в зависимости от условий пользования).

3. стр.35.

В зависимости от версии операционной системы распределение адресов постоянной памяти может быть иным.

4. стр.42.


   Текст программы:


*1000: AD 00 C2    LDA ¤C200
*1003: 8D 07 10    STA ¤1007
*1006: 60          RTS
*1007: ВК (перевод строки)

1007 - ХХ 

5. стр.51.

а) Динамик выдает один щелчек при каждом втором обращении к ячейкам ¤C030 - ¤C03F.

б) Стандартная подпрограмма на ассемблере для определения положения ручки пульта. Входные данные: X - номер пульта (0 или 1). Выходные данные: Y - значение поворота (0-255):


*2000: A0 00     LDY #0
 2002: EA        NOP
 2003: EA        NOP
 2004: BD 64 C0  LDA ¤C064,X
 2007: 10 04     BPL ¤200D
 2009: C8        INY
 200A: D0 F8     BNE ¤2004
 200C: 88        DEY
 200D: 60        RTS

6. Стр.67, 3-й абзац

   Имелось в виду ¤E и ¤0E.

7. Стр.71

   Не *314:0, а *313:0

8. Стр.73

   2-я и 3-я строки программы:


MET0: LDY #00    30C:A0 00
MET1: LDA ¤300   30E:AD 00 03

9. Стр.74

   При программировании в мониторе значения должны отделяться пробелом:


*0:FF FF AD 30 C0 и т.д.

10. Стр.75 (Мини-ассемблер).

   Программа для вывода букв от A до Z написана для монитора компьютера типа "APPLE ][". Вот программа для системного монитора ПЭВМ "АГАТ":


*300: A9 C1 29 D7 FD 18 69 01 C9 DB D0 F6 60

*300L
0300: A9 C1     LDA #¤C1
0302: 20 D7 FD  JSR ¤FDD7
0305: 18        CLC
0306: 69 01     ADC #¤01
0308: C9 DB     CMP #¤DB
030A: D0 F6     BNE ¤302
030C: 60        RTS
030D: 00        BRK

11. Стр.78.

а) Перечислены некоторые подпрограммы монитора языка БЕЙСИК (в скобках - монитора ПЭВМ "АГАТ").

б) 8D - перевод строки.

12. Стр.82, 2-й абзац снизу

... УПР-D на клавиатуре).

13. Стр.83.

CATALOG

14. Стр.86.

а) 50 !JSR ¤3D9

б) ONERRGOTO

15. Стр.91 в конце:

SPC (X)

16. Стр.94.

PLOT X0,Y0 TO X1,Y1 (пробелы нужно ставить обязательно, иначе интерпретатор может принять выражение за переменную Y0TOX1).

17. Стр.95.

   5 КОН = ¤FDDF
  20 ! JSR KOH ! RTS

18. Стр.97.

   20 ! PLA
      ! STA 1
      ! PLA
      ! STA 0

19. Стр.99.

а) директива PRINT CHR¤ (29) очищает строку...

б) УПР и G

20. Стр. 103

   40  IF PEEK (216) > 127 THEN GOTO 1000

21. Стр. 109

...по адресу C200 псевдо ПЗУ стало доступным для записи в него...

...обращением по адресу C220.

22. Стр. 245.

   * 2000: FF N ...

23. Стр. 293.

   Окончание программы CPA-80:


05CC- 9E 41 80 96
05D0- 83 84 94 82 95 88 89 8A
05D8- 8B 8C 8D 8E 8F 9F 90 91
05E0- 92 93 86 81 9C 9B 87 98
05E8- 9D 99 97 9A FF FF DF 5F
05F0- 7F 7F 7F FF 02 12 05 50
05F8- FF FD 00 00 00 00 00 00

24. Стр.283

   Вторая часть программы SKOR


0F00- 4C 45 0F 44 44 00 20 22
0F08- 44 FF B4 B5 B0 B0 B2 00
0F10- 20 D5 0D 10 02 38 60 A9
0F18- 1D 85 FA A0 FF 84 F9 BD
0F20- 8D C0 BD 8E C0 A9 FF 9D
0F28- 8F C0 1D 8C C0 4C 3A 0D
0F30- A9 FF 9D 8D C0 DD 8C C0
0F38- A6 FB 48 68 48 68 88 D0
0F40- 06 C6 FA D0 EB F0 05 EA
0F48- EA 4C 30 0D 9D 8D C0 DD
0F50- 8C C0 20 83 0D A9 D5 20
0F58- 88 0D A9 D5 20 88 0D A9
0F60- D5 20 88 0D A9 D5 20 88
0F68- 0D A9 D5 20 88 0D A9 FF
0F70- 20 88 0D 20 94 0D 48 68
0F78- EA EA EA BD 8E C0 BD 8C
0F80- C0 18 60 EA 48 68 48 68
0F88- EA CD 00 02 A6 FB 9D 8D
0F90- C0 DD 8C C0 60 A9 22 8D
0F98- 07 0D A5 FB 05 FC AA BD
0FA0- 8A C0 20 B4 0D 20 DE 0D
0FA8- AD 07 0D A6 FB 20 EB 0D
0FB0- 20 10 0D 60 A6 FB BD 89
0FB8- C0 A9 77 85 46 A9 EC 85
0FC0- 47 A0 12 88 D0 FD E6 46
0FC8- D0 F7 E6 47 D0 F3 60 A6
0FD0- FB BD 88 C0 60 A6 FB BD
0FD8- 8D C0 BD 8E C0 60 A6 FB
0FE0- A9 C0 8D 08 0D A9 00 20
0FE8- EB 0D 60 86 FB 0A 8D 03
0FF0- 0D CD 08 0D F0 5A A9 00
0FF8- 8D 05 0D AD 08 0D 8D 04
1000- 0D 38 ED 03 0D F0 37 B0
1008- 07 49 FF EE 08 0D 90 05
1010- 69 FE CE 08 0D CD 05 0D
1018- 90 03 AD 05 0D C9 0C B0
1020- 01 A8 38 20 42 0E B9 62
1028- 0E 20 51 0E AD 04 0D 18
1030- 20 45 0E B9 6E 0E 20 51
1038- 0E EE 05 0D D0 BD 20 51
1040- 0E 18 AD 08 0D 29 03 2A
1048- 05 FB AA BD 80 C0 A6 FB
1050- 60 A2 11 CA D0 FD E6 46
1058- D0 02 E6 47 38 E9 01 D0
1060- F0 60 01 30 28 24 20 1E
1068- 1D 1C 1C 1C 1C 1C 70 2C
1070- 26 22 1F 1E 1D 1C 1C 1C
1078- 1C 1C A0 00 8C 05 0D 8C
1080- 06 0D A6 FB BD 8C C0 EA
1088- BD 8C C0 10 FB C9 D5 D0
1090- F7 BD 8C C0 10 FB C9 D5
1098- F0 F7 48 68 BD 8C C0 C9
10A0- D5 F0 08 C8 D0 F4 EE 06
10A8- 0D D0 F1 8C 05 0D AD 06
10B0- 0D C9 3A B0 C5 0E 05 0D
10B8- 2E 06 0D A2 05 A9 B0 9D
10C0- 09 0D CA D0 F8 A2 0A AD
10C8- 05 0D 38 FD 39 0F 8D 09
10D0- 0D AD 06 0D FD 3A 0F 90
10D8- 27 8D 06 0D AD 09 0D 8D
10E0- 05 0D 8A 8D 09 0D 4A AA
10E8- FE 09 0D BD 09 0D C9 BA
10F0- D0 08 A9 B0 9D 09 0D FE
10F8- 0A 0D AE 09 0D 4C C7 0E
1100- CA CA F0 13 E0 08 D0 BF
1108- 0E 05 0D 2E 06 0D 0E 05
1110- 0D 2E 06 0D 4C C7 0E AD
1118- 0E 0D 20 DF FD AD 0D 0D
1120- 20 DF FD AD 0C 0D 20 DF
1128- FD A9 AE 20 DF FD AD 0B
1130- 0D 20 DF FD AD 0A 0D 20
1138- DF FD 60 04 00 29 00 98
1140- 01 F0 0F D7 27 20 95 0D
1148- 90 08 A9 FF 85 FF 20 CF
1150- 0D 60 A9 1A 85 25 20 8E
1158- FD A9 1A 85 24 20 7A 0E
1160- AD 40 C0 C9 1B 8D 60 C0
1168- D0 E8 A6 FB BD 88 C0 A9
1170- 00 85 FF 60 86 0E A5 12
1178- 38 E9 AD 4C 8D 0E A2 00
1180- 2C A2 08 2C A2 10 2C A2
1188- 77 2C A2 83 BD A0 0F F0
1190- 06 20 D4 FD E8 D0 F5 60
1198- 20 8C 0F A2 6E 4C 8C 0F
11A0- 8D 84 C2 CC CF C1 C4 00
11A8- 8D 84 C2 D3 C1 D6 C5 00
11B0- C1 D3 CD C9 C4 D3 D4 C1
11B8- CD D0 AC D3 B6 AC C4 B1
11C0- AC C1 A4 B3 C2 B8 8D 00
11C8- CC B1 B7 8D 00 C3 CD C4
11D0- A0 D3 D9 CE D4 C1 D8 00
11D8- CE D5 CD C5 D2 C9 C3 A0
11E0- CF D6 C5 D2 C6 CC CF D7
11E8- 00 D0 C1 D2 C1 CD C5 D4
11F0- 00 43 D6 4E 4F 52 4D 55
11F8- CC 44 53 50 45 45 C4 43
1200- 41 54 41 4C 4F C7 00 15
1208- 00 00 00 00 73 61 A0 7A

ПРИЛОЖЕНИЕ

УНИВЕРСАЛЬНЫЙ ДРАЙВЕР ПЕЧАТИ


; ДPAЙBEP ПEЧATИ ДЛЯ PAБOTЫ C
; БEЙCИKOM-60, 64, 67. BKЛЮЧEH
; EДИHЫЙ ДPAЙBEP УCTPOЙCTBA ПEЧATИ
; (D-100, CPA-80, EPSON FX-85, FX800, CM6337)
; ДЛЯ CИCTEM "ШKOЛЬHИЦA" И "ACCEMБЛEP 80"
; 26.3.90 HИИBK. ПEPEДEЛAHO C.ФPOЛOBЫM 18.7.90
;   

DSEL   EQU ¤C080
INVFLG EQU ¤32
HTAB   EQU ¤24
        
 ORG ¤500

 LDX #1
PR.1 LDA ¤AA53,X
 STA COM1+1,X
 LDA COM2,X
 STA ¤A22C,X
 DEX
 BPL PR.1
 RTS

PRINT AND #7
 BNE PR.2
 JMP ¤FE90
PR.2 ASL A
 ASL A
 ASL A
 ASL A
 STA PRINTSLOT
 LDA #¤8D
 JSR PCOUT
 LDA #PCOUT
 STA ¤36
 LDA #
PCOUT STX XSAV
 STY YSAV
 PHA
RET LDA MET
 BIT INVFLG
 BMI NOCOLOR
 ASL A
NOCOLOR CMP HTAB
 BCS NOSP
 LDA #¤A0
 JSR CODING
 BNE RET
NOSP
 PLA
 PHA
 JSR CODING
 PLA
 LDX XSAV
 LDY YSAV
COM1 JMP ¤FDDF

 DS ¤579-*
CODING INC MET
 CMP #¤8D
 BNE CODING1
 LDA #¤8A
CODING1 CMP #¤8A
 BNE CODING2
 LDX #0
 STX MET
CODING2 PHA
 LSR A
 LSR A
 LSR A
 LSR A
 LSR A
 TAX
 PLA
 EOR TD100,X
 PHA           KOИ8 CИMBOЛ
 LDX PRINTSLOT
WRDY JSR FIRSTWAIT OЖИДAHИE ГOTOBHOCTИ C INIT И ПИCKOM
* ASL A         B[5]-BKЛЮЧИTЬ ПEPEKOДИPOBЩИK
* ASL A         C=1:PУCCKИЙ AЛФABИT,C=0:ПOД ЛATИHCKИMИ
* TAY           ДЛЯ ЧETHOCTИ И ИHBEPCИИ
 ROL A  [0]=CODE1
 PHA
 ASL A
 ASL A C=CODE0
 PLA
 ROL A
 AND #3 CODE 0=KOИ8,1=ГOCT,2=CPA80,3=FX85
 TAX
 PLA KOИ8 SYMBOL
 CMP #¤C0
 BCC SYMRDY ПOCTOЯHHAЯ ЧACTЬ TAБЛИЦЫ
 DEX 0:ГOCT 1:CPA 2:FX85
 BMI SYMRDY
 STY SAV0
 CMP #¤E0 C=БOЛЬШAЯ
 PHP
 AND #¤DF
 TAY
 LDA RUS-¤C0,Y
 LDY SAV0
 CMP #¤86 "Ж"
 BCC LESSTHEE
 ADC EETAB,X
LESSTHEE PLP
 BCS CAPITAL
 ADC SMALL,X
CAPITAL CLC
 ADC TABEG,X
 BMI SYMRDY
 LDA #¤41 7F-RUSSIAN A IN CPA SET
SYMRDY LDX PRINTSLOT
;
;
OUTIT PHP A=BYTE,X=SLOT10,Y=3*ASL(DSEL+2)  
 INY
 DEY
 BPL N.INVERS
 JMP PR.3
 ASC :** CHANGE PROGRAM BY  (R) 17.07.1990 **:

*DS ¤5F8-*
*DFB ¤30
PR.3
 EOR #¤FF    
N.INVERS STA DSEL,X
 CMP DSEL,X
 BEQ PARITY
 LDA #¤89
 STA DSEL+3,X
 PHA
 PLA
 LDA #¤90
 STA DSEL+1,X
 LDA #¤C0
 STA DSEL+1,X
PARITY ASL A
 BCC INCLESS
 INY
INCLESS BNE PARITY
 TYA
 AND #1
 ADC #1
 ORA #¤60      \STROBE,\INIT,STROBE,INIT
 PHA
 STA DSEL+1,X  ПOCTABИTЬ CTPOБ И ЧETHOCTЬ
 TYA
 ASL A
 BPL BUZYRDY   B[3]=1:ИCПOЛЬЗУEM,KAK ACK
WAITACK JSR ACKBUZY OЖИДAHИE CHЯTИЯ ГOTOBHOCTИ
 BCC WAITACK
BUZYRDY PLA
 EOR #¤A0
 STA DSEL+1,X  CHЯTЬ CTPOБ
 PLP
 RTS       
* ПAPMETPЫ KOДИPOBOK:ГOCT,CPA80,FX85
EETAB DFB ¤FF,0,0 TOЛЬKO B ГOCT HET ДOБABKИ K N CИMBOЛA
*    ПOCЛE EE
SMALL DFB ¤20,¤21,¤30 ДOБABKA MAЛЫX БУKB
TABEG DFB ¤30,¤FF,¤21 OT ¤80 ДO HAЧAЛA TAБЛИЦЫ
;
; READY OR BUZY?
ACKBUZY LDA DSEL+2,X
 ASL A         B[7]-BUZY/ACK; B[6]=1: B[7]=READY,
 BPL ACKBRTS   B[6]=0: B[7]=BUZY: ПO БИTУ B[6] 
 ROR A         (ECTЬ ПEPEMЫЧKA ИЛИ HET)
 EOR #¤80      OПPEДEЛЯETCЯ KAKИM УPOBHEM ИДET BUZY,
 ASL A         LOW BUZY ИHBEPTИPУETCЯ
ACKBRTS RTS    C=1 - BUZY
;
FIRSTWAIT LDY #0
 STY SAV0
FWLP JSR ACKBUZY
 BCC OK
 DEY
 BNE FWLP
 INC SAV0
 BPL FWLP
 STA ¤C030
 LDY #6
 BIT ¤C000
 BPL FWLP
 STA ¤C010
OK ASL A
 ASL A
 TAY
 RTS
;
*PУCCKИЙ AЛФABИT БEЗ EE OT 80 ДO 9F
RUS DFB ¤9E,¤80,¤81,¤96,¤84,¤85,¤94,¤83 ЮAБЦДEФГ
 DFB ¤95,¤88,¤89,¤8A,¤8B,¤8C,¤8D,¤8E    XИЙKЛMHO
 DFB ¤8F,¤9F,¤90,¤91,¤92,¤93,¤86,¤82    ПЯPCTУЖB
 DFB ¤9C,¤9B,¤87,¤98,¤9D,¤99,¤97,¤9A    ЬЫЗШЭЩЧЪ
TD100 DFB 0,0,¤20,¤A0,¤80,¤80,¤80,0
;
PRINTSLOT DFB 0
COM2      DW PRINT
MET       DFB 0
XSAV      DFB 0
YSAV      DFB 0
SAV0      DFB 0

С.ФРОЛОВ 23.7.90