Вот готовая программа.
Консоль работает!
Самое странное, с чем столкнулся - это с тем, что некоторые версии 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 (Атарьская прошивка) тоже расположена в ПЗУ.