Вот готовая программа.
Консоль работает!
Самое странное, с чем столкнулся - это с тем, что некоторые версии MAC/65 не поддерживают символа подчёркивания.
Ничего страшного. Можно заменить в тексте какой нибудь буковкой.
В тексте можно применить инверсию текста для нажатых клавиш.Код:1000 ; CONSOL STATUS ROUTINE 1010 ; 1020 ; ATARI EQUATES 1030 SDMCTL = $022F 1040 SDLSTL = $0230 1050 SDLSTH = $0231 1060 CONSOL = $D01F 1070 SETVBV = $E45C 1080 SYSVBV = $E45F 1090 ; 1100 ; PROGRAM CONSTANTS 1110 BL1 = $00 1120 BL7 = $60 1130 BL8 = $70 1140 GR0 = $02 1150 LMS = $40 1160 JTO = $01 1170 JVB = $41 1180 ; 1190 ; Z-PAGE CELLS 1200 Z_OLDL = $C0 1210 ; 1220 .OPT LIST,OBJ 1230 ; 1240 START *= $2000 1250 JMP INIT 1260 ; 1270 DLDATA 1280 L0 .SBYTE " Consol: /START/ /SELECT/ /OPTION/ " 1290 L1 .SBYTE " Consol: /Start/ /SELECT/ /OPTION/ " 1300 L2 .SBYTE " Consol: /START/ /Select/ /OPTION/ " 1310 L3 .SBYTE " Consol: /Start/ /Select/ /OPTION/ " 1320 L4 .SBYTE " Consol: /START/ /SELECT/ /Option/ " 1330 L5 .SBYTE " Consol: /Start/ /SELECT/ /Option/ " 1340 L6 .SBYTE " Consol: /START/ /Select/ /Option/ " 1350 L7 .SBYTE " Consol: /Start/ /Select/ /Option/ " 1360 ; 1370 NEW_DL 1380 .BYTE BL8,BL7 1390 .BYTE GR0+LMS 1400 LMSADR 1410 .WORD 0 1420 .BYTE JTO 1430 TO_OLD 1440 .WORD 0 1450 ; 1460 VBI 1470 LDA CONSOL 1480 ASL A 1490 TAY 1500 LDA TABRET,Y 1510 STA LMSADR 1520 INY 1530 LDA TABRET,Y 1540 STA LMSADR+1 1550 ; 1560 JMP EXIT 1570 ; 1580 INIT 1590 LDA #$06 1600 LDX # >VBI 1610 LDY # <VBI 1620 JSR SETVBV 1630 ; 1640 LDA CONSOL 1650 STA OLDCON 1660 ; 1670 LDA #$00 1680 STA SDMCTL 1690 ; 1700 LDA SDLSTL 1710 STA Z_OLDL 1720 CLC 1730 ADC #3 1740 STA TO_OLD 1750 ; 1760 LDA SDLSTH 1770 STA Z_OLDL+1 1780 STA TO_OLD+1 1790 ; 1800 LDA # <NEW_DL 1810 STA SDLSTL 1820 LDY #30 1830 STA (Z_OLDL),Y 1840 ; 1850 LDA # >NEW_DL 1860 STA SDLSTH 1870 LDY #31 1880 STA (Z_OLDL),Y 1890 ; 1900 LDA #$22 1910 STA SDMCTL 1920 ; 1930 RTS 1940 ; 1950 EXIT 1960 LDA CONSOL 1970 STA OLDCON 1980 JMP SYSVBV 1990 ; 2000 OLDCON 2010 .BYTE 0 2020 TABRET 2030 .WORD L0,L1,L2,L3 2040 .WORD L4,L5,L6,L7
Но вместо инверсных букв появятся кракозябры. Не стал.
- - - Добавлено - - -
Да, кстати, тут где-то вопрос о применении HW-ячеек, типа DMACTL вставал.
Тех, которые каждый раз переписываются на этапе обработки подпрограммы SYSVBV во время обратного хода луча...
Лучше их не трогать вообще.
Их адреса не сдуру переписываются из Теневых Регистров.
Представим загрузку картриджа, который тоже HW-периферия.
При включении он перехватывает у программы стандартной загрузки управление и производит свою настройку программой инициализации.
Разумеется, переменные, связанные с настройкой картриджа, он помещает в ОЗУ. Сам-то он ПЗУ!!!
Как раз стандартизированная система переменных для любого оборудования и есть Теневые Регистры на второй странице памяти. (Первая занята аппаратным стеком.)
Разумеется, нормальная загрузка Атари подразумевает ТО ЖЕ САМОЕ, так как ATARI OS (Атарьская прошивка) тоже расположена в ПЗУ.




Ответить с цитированием