К ВНИМАНИЮ НАЧИНАЮЩИХ ПРОГРАММИСТОВ!
Наконец-то вышла из печати первая и единственная в своем роде книжка, которая полностью посвящена нашей любимой ПЭВМ "АГАТ" (Мымрин М.П., Конструкция, применение, программирование и ремонт ПЭВМ "АГАТ". М.:Машиностроение, 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