Вот готовая программа.
Консоль работает!

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