0100 ;PARTIAL DVORAK KEYBOARD›0110 ;BY DAVE YEARKE›0120 ;(c) 1986, ANTIC PUBLISHING›0130 ATRACT = $4D›0140 CH = $02FC›0150 CH1 = $02F2›0160 DOSINI = $0C›0170 DOSVEC = $0A›0180 HELPFG = $02DC ;XL/XE ONLY›0190 HOLDCH = $7C›0200 INITAD = $02E2›0210 KBCODE = $D209›0220 KEYDEF = $79›0230 KEYDEL = $02F1›0240 KRPDEL = $02D9 ;XL/XE ONLY›0250 MEMLO = $02E7›0260 SRTIMR = $022B›0270 SSFLAG = $02FF›0280 START = $1D00›0290 VKEYBD = $0208›0300 ;SYSTEM RESET TRAP›0310 *= START›0320 RSTTRAP JSR DUMMY›0330 LDA # RSTTRAP ;LO BYTES›0360 STA DOSINI+1 ;HI BYTES›0370 LDA # DOSTRAP›0400 STA DOSVEC+1›0410 LDA # BOTTOM›0440 STA MEMLO+1›0450 LDA # HANDLER ;INTO VKEYBD›0480 STA VKEYBD+1›0490 LDA #$FF›0500 STA ARFLAG›0510 STA KBFLAG›0520 RTS ›0530 DOSTRAP LDA #$30›0540 STA SRTIMR ;AUTO-REPEAT ON.›0550 LDA RSTTRAP+1›0560 STA DOSINI›0570 LDA RSTTRAP+2›0580 STA DOSINI+1›0590 LDA BYEBYE+1›0600 STA DOSVEC›0610 LDA BYEBYE+2›0620 STA DOSVEC+1›0630 LDA MEMHOLD›0640 STA MEMLO›0650 LDA MEMHOLD+1›0660 STA MEMLO+1›0670 LDA KEYHOLD ;REPLACE ORIGINAL›0680 STA VKEYBD ;HANDLER›0690 LDA KEYHOLD+1›0700 STA VKEYBD+1›0710 BYEBYE JMP DUMMY›0720 ;POKEY INTERRUPT ROUTINE›0730 HANDLER TXA ›0740 PHA ›0750 LDA KBCODE›0760 CMP CH1›0770 BNE NEWKEY›0780 LDX KEYDEL›0790 BNE SETTIMES›0800 NEWKEY TAX ;KEY VALUE INTO X.›0810 CMP #$9F ;IS IT CTL-1?›0820 BNE CTL4 ;IF NOT, BRANCH.›0830 LDA SSFLAG ;SCREEN FREEZE FLAG.›0840 EOR #$FF›0850 STA SSFLAG›0860 BCS SETDELAY ;SET TIMERS.›0870 CTL4 CMP #$98›0880 BNE CTL5›0890 LDA KBFLAG›0900 EOR #$FF ;TOGGLE FLAG.›0910 STA KBFLAG›0920 BCS SETDELAY›0930 CTL5 CMP #$9D›0940 BNE HELP›0950 LDA ARFLAG›0960 EOR #$FF›0970 STA ARFLAG›0980 BCS SETDELAY›0990 HELP AND #$3F ;MASK HIGH BITS.›1000 CMP #$11›1010 BNE CONVERT›1020 STX HELPFG›1030 BEQ SETDELAY›1040 CONVERT STX HOLDCH›1050 STX CH1›1060 ARROWS LDA ARFLAG›1070 BNE DVORAK›1080 TXA ›1090 AND #$40 ;TEST SHIFT BIT.›1100 BNE DVORAK›1110 TXA ›1120 STA HOLDCH›1130 AND #$3F›1140 LDX #$04›1150 ARLOOP DEX ›1160 CMP ARRTAB,X ;CHECK TABLE›1170 BEQ NEWARR ;ARROW›1180 CPX #$00 ;DONE?›1190 BNE ARLOOP›1200 DVORAK LDA KBFLAG ;CHECK TYPE›1210 BNE PUTCH›1220 LDX HOLDCH›1230 TXA ›1240 AND #$C0›1250 STA HOLDCH›1260 TXA ›1270 AND #$3F›1280 TAX ›1290 LDA TABLE,X›1300 ORA HOLDCH›1310 STA HOLDCH›1320 PUTCH LDA HOLDCH›1330 STA CH›1340 SETDELAY LDA #$03 ;DEBOUNCE›1350 STA KEYDEL›1360 LDA #$00›1370 STA ATRACT›1380 SETTIMES LDA KBFLAG›1390 BEQ STIME›1400 LDA ARFLAG›1410 BEQ STIME›1420 LDA #$30›1430 STIME STA SRTIMR›1440 PLA ›1450 TAX ›1460 PLA ›1470 RTI ›1480 NEWARR LDA HOLDCH›1490 EOR #$80›1500 STA HOLDCH›1510 BNE PUTCH›1520 ;DVORAK OFFSET TABLE›1530 TABLE .BYTE $23,$39,$3E,$03,$04,$2D,$06,$07›1540 .BYTE $28,$09,$00,$3D,$0C,$12,$0E,$0F›1550 .BYTE $05,$11,$01,$13,$14,$16,$2F,$02›1560 .BYTE $18,$19,$1A,$1B,$1C,$1D,$1E,$1F›1570 .BYTE $2E,$21,$10,$15,$24,$25,$17,$27›1580 .BYTE $0A,$29,$22,$38,$2C,$2B,$20,$26›1590 .BYTE $30,$31,$32,$33,$34,$35,$36,$37›1600 .BYTE $0B,$3A,$2A,$3B,$3C,$0D,$08,$3F›1610 ;ARROW KEY TABLE›1620 ARRTAB .BYTE $06,$07,$0E,$0F›1630 KEYHOLD .DS 2›1640 MEMHOLD .DS 2›1650 ARFLAG .DS 1›1660 KBFLAG .DS 1›1670 DUMMY›1680 BOTTOM .DS 1›1690 ;INSTALLATION ROUTINE›1700 INIT LDA DOSINI›1710 STA RSTTRAP+1›1720 LDA DOSINI+1›1730 STA RSTTRAP+2›1740 LDA DOSVEC›1750 STA BYEBYE+1›1760 LDA DOSVEC+1›1770 STA BYEBYE+2›1780 LDA MEMLO›1790 STA MEMHOLD›1800 LDA MEMLO+1›1810 STA MEMHOLD+1›1820 LDA VKEYBD›1830 STA KEYHOLD›1840 LDA VKEYBD+1›1850 STA KEYHOLD+1›1860 JMP RSTTRAP+3›1870 *= INITAD›1880 .WORD INIT›1890 .END ›