10 REM ATOM CONSOLE DRIVER
20 REM (c) Roland Leurs 1995
30 REM Atom Terminal v3.08 of hoger vereist !
40
45 NONMI
50 PASS 2;GOSUB a
60 PASS 1;GOSUB a
70 END
80
90aASM-B
100 .CODE #EDEF
110 .RAM #6DEF
120 .OPTION #80
130
140 :ZENDBYTE = #FFC8
150 :LEESBYTE = #FFC5
160 :OSBYTE = #FFC2
170
180 :PCCOM = #3D9
190 :NMIVLAG = #3DA
200 :PLOTVEC = #3FE
210 :SCHADUW1 = #4FD
220 :SCHADUW = #4FF
230 :VIA = #B810
240 :LATCH = #B888
250 :VLATCH_L = #B900
260 :VLATCH_H = #B901
270 :WERK = #09
280
290 \ ***********************************************************************
300 \ Grafische drivers voor extended video modi (clear 5 en hoger)
310 \ ***********************************************************************
320
330 :PLTVEC LDA @#0B \ TEST SEMAFOOR
340 JSR OSBYTE
350 BCC PLTVEC+2 \ EVENTUEEL WACHTEN TOT TOEGANG VRIJ IS
360 LDA @#00 \ PLOT COMMANDO NAAR PC STUREN
370 JSR ZENDBYTE
380 LDA @#34
390 JSR ZENDBYTE
400 LDX @0 \ LAADT TELLER
410 :PLTVEC1 LDA #5A,X \ LEES COORDINAAT
420 JSR ZENDBYTE \ STUUR NAAR PC
430 INX \ VERHOOG TELLER
440 CPX @5 \ ALLES OVERGESTUURD
450 BNE PLTVEC1 \ NEE, DAN VOLGENDE COORDINAAT
460 LDA @#0A \ GEEF SEMAFOOR VRIJ EN EINDE ROUTINE
470 JMP OSBYTE
480
490 :CLEARE LDA @#0B \ TEST SEMAFOOR
500 JSR OSBYTE
510 BCC CLEARE+2 \ EVENTUEEL WACHTEN TOT TOEGANG VRIJ IS
520 LDA @#00 \ GEEF EXTENDED VIDEO MODE COMMANDO AAN PC
530 JSR ZENDBYTE
540 LDA @#32
550 JSR ZENDBYTE
560 LDA #52 \ LAADT OPGEGEVEN MODE
570 SEC \ ZET CARRY VOOR AFTREKKEN
580 SBC @5 \ TREK ER 5 VAN AF VOOR JUISTE MODE
590 JSR ZENDBYTE \ GEEF MODE AAN PC
600 LDA @<PLTVEC \ ZET NIEUWE PLOTVECTOR
610 STA PLOTVEC
620 LDA @>PLTVEC
630 STA PLOTVEC+1
640 JMP ENDCOL \ SPRING NAAR EINDE STATEMENT
650
660 \ ***********************************************************************
670 \ Grafische drivers voor CLEAR 0 ... 4 emulatie
680 \ ***********************************************************************
690
700 :CLEARSTAT JSR #C3C8 \ ZET DE VIDEOMODE IN #52
710 LDA #52 \ LEES VIDEOMODE
720 CMP @#05 \ TEST OP ATOM/EXTENDED VIDEO INIT
730 BPL CLEARE \ SPRING INDIEN EXTENDED VIDEO MODE
740 ASL A \ VERMENIGVULDIG MET 2
750 CLC \ CLEAR CARRY VOOR OPTELLING
760 ADC @40 \ TEL ER 40 BIJ OP VOOR PC COMMANDO
770 STA PCCOM \ BERG PC COMMANDO OP
780 LDA @<NMI \ ZET NMI VECTOR
790 STA #200
800 LDA @>NMI
810 STA #201
820 LDA SCHADUW1 \ ENABLE VIDEO INTERRUPT
830 ORA @:00100000
840 STA SCHADUW1
850 LDA SCHADUW
860 AND @#0F
870 ORA SCHADUW1
880 STA LATCH
890 LDA @#00 \ ZET PC IN GRAFISCHE MODE
900 STA NMIVLAG
910 JSR ZENDBYTE
920 LDA #52 \ LEES VIDEO MODE
930 BNE ZETGRMODE \ SPRING INDIEN CLEAR 1..4
940 LDA @#60 \ VOOR CLEAR 0 GELDT APART COMMANDO
950 BNE ZETGRMODE+2
960 :ZETGRMODE LDA @#04
970 JSR ZENDBYTE
980 JMP #F67E \ GA VERDER MET CLEAR STATEMENT
990
1000 :COLOURSTAT JSR #C3C8 \ ZET PARAMETER IN #52
1010 LDA PLOTVEC+1 \ TEST OP ATOM/EXTENDED GRAPHICS
1020 CMP @>PLTVEC
1030 BEQ COLOURE \ SPRING BIJ EXTENDED VIDEO MODE
1040 LDA PCCOM \ ZET NIEUW GRAPHICS COMMANDO
1050 ORA @:00000001
1060 STA PCCOM
1070 JMP #DF05 \ GA VERDER MET ATOM COLOUR STATEMENT
1080 :COLOURE LDA @#0B \ ZET SEMAFOOR
1090 JSR OSBYTE
1100 BCC COLOURE+2 \ INDIEN TOEGANG GEWIJGERD BLIJF WACHTEN
1110 LDA @#00 \ GEEF COLOUR COMMANDO AAN PC
1120 JSR ZENDBYTE
1130 LDA @#33
1140 JSR ZENDBYTE
1150 LDA #52 \ GEEF NIEUWE KLEUR AAN PC
1160 JSR ZENDBYTE
1170 :ENDCOL LDA @#0A \ GEEF SEMAFOOR VRIJ
1180 JSR OSBYTE
1190 JMP #F6BC \ EINDE STATEMENT
1200
1210 :NMI LDA @#0B \ TEST SEMAFOOR
1220 JSR OSBYTE
1230 BCS TESTVLAG \ SPRING ALS TOESTEMMING GEKREGEN
1240 LDA NMIVLAG \ ZET VLAG VOOR AFWIJZING
1250 ORA @#01
1260 STA NMIVLAG
1270 JMP NMIEND \ EINDE NMIROUTINE
1280 :TESTVLAG TYA \ SAVE NU OOK HET Y-REGISTER
1290 PHA
1300 LDA NMIVLAG \ TEST OF HELE SCHERM GESCHREVEN WORDT
1310 LSR A
1320 BCC ADRES \ SPRING INDIEN SLECHTS EEN ADRES HOEFT
1330 LDA @#00 \ ZET BEGINADRES VIDEORAM IN WERKRUIMTE
1340 STA WERK
1350 LDA @#80
1360 STA WERK+1
1370 LDY @#00
1380 :NMILUS LDA @#00 \ GEEF PLOTCOMMANDO AAN PC
1390 JSR ZENDBYTE
1400 LDA PCCOM
1410 JSR ZENDBYTE
1420 LDA WERK+1 \ GEEF ADRES AAN PC
1430 JSR ZENDBYTE
1440 LDA WERK
1450 JSR ZENDBYTE
1460 LDA (WERK),Y \ LEES DATA
1470 JSR ZENDBYTE \ GEEF AAN PC
1480 INC WERK \ VERHOOG ADRESTELLER
1490 BNE NMILUS1
1500 INC WERK+1
1510 :NMILUS1 LDA WERK+1 \ KIJK OF EINDE SCHERM BEREIKT IS
1520 CMP @#98
1530 BNE NMILUS \ NEE, DAN VOLGENDE BYTE
1540 JMP RESTORE
1550
1560 :ADRES LDA @#00 \ GEEF PLOTCOMMANDO AAN PC
1570 JSR ZENDBYTE
1580 LDA PCCOM
1590 JSR ZENDBYTE
1600 LDA VLATCH_H \ GEEF ADRES AAN PC
1610 STA WERK+1
1620 JSR ZENDBYTE
1630 LDA VLATCH_L
1640 STA WERK
1650 JSR ZENDBYTE
1660 LDY @#00
1670 LDA (WERK),Y \ GEEF DATA AAN PC
1680 JSR ZENDBYTE
1690 :RESTORE LDA @#0A \ GEEF SEMAFOOR VRIJ
1700 JSR OSBYTE
1710 LDA NMIVLAG \ WIS NMI VLAG
1720 AND @#FE
1730 STA NMIVLAG
1740 PLA \ HERSTEL REGISTERS
1750 TAY
1760 :NMIEND PLA
1770 RTI \ EINDE NMI ROUTINE
1780
1790 \ ***********************************************************************
1800 \ WRCH EN RDCH routines
1810 \ WRCH - drukt teken in accu af op beeldscherm of printer
1820 \ RDCH - plaatst ascii waarde van ingedrukte toets in Accu
1830 \ ***********************************************************************
1840
1850 :WRCH CMP @#00 \ TEST OP $0
1860 BNE WRCH1 \ SPRING INDIEN GEEN $0
1870 JSR ZENDBYTE \ VOOR $0 MOET PCCOM#00 GEGEVEN WORDEN
1880 :WRCH1 JMP ZENDBYTE \ STUUR KARAKTER NAAR PC
1890
1900 :RDCH CPY @#00 \ BUFFER LEEG ?
1910 BNE WAIT4KEY \ NEE, SPRING
1920 STY #53 \ BEWAAR Y
1930 :WAIT4KEY JSR SCAN \ VOER KEYBOARD SCAN UIT
1940 CMP @#00 \ TOETS GEDRUKT ?
1950 BEQ WAIT4KEY \ OPNIEUW SCANNEN ALS GEEN TOETS GEDRUKT IS
1960 CMP @#7F \ TEST OP BACKSPACE
1970 BEQ RDCH_BS \ SPRING INDIEN BACKSPACE
1980 CMP @#20 \ TEST OP SPATIE OF KARAKTER
1990 BCS RDCH_AS \ SPRING INDIEN KARAKTER
2000 CMP @#1B \ TEST OP ESCAPE
2010 BEQ RDCH_ESC \ SPRING INDIEN ESCAPE
2020 CMP @#0D \ TEST OP ENTER
2030 BEQ RDCH_END \ SPRING INDIEN ENTER
2040 JSR #FFF4 \ HET IS EEN CONTROL CODE, VOER DEZE UIT
2050 JMP WAIT4KEY \ GA SCANNEN VOOR VOLGENDE TOETS
2060
2070 :RDCH_AS CPY @#80 \ KONTROLEER BUFFER LENGTE
2080 BCS RDCH_END \ SPRING INDIEN BUFFER VOL
2090 INC #52 \ VERHOOG BUFFER TELLER
2100 RTS \ EINDE RDCH - karakter ingevoerd
2110
2120 :RDCH_BS CPY @#00 \ TEST OP LEGE BUFFER
2130 BEQ RDCH_END \ SPRING BIJ LEGE BUFFER
2140 CPY @#81 \ TEST OP VOLLE BUFFER
2150 BCS RDCH_END \ SPRING INDIEN MEER DAN VOL (?)
2160 DEC #52 \ VERLAAG BUFFER TELLER
2170 RTS \ EINDE RDCH - backspace ingevoerd
2180
2190 :RDCH_ESC LDY #53 \ HAAL Y-WAARDE TERUG
2200 BEQ RDCH_ESC1 \ SPRING INDIEN 0
2210 LDY @#40 \ LAADT Y MET #40 (?)
2220 :RDCH_ESC1 STY #52 \ ZET ALS BUFFER POINTER
2230 :RDCH_END RTS \ EINDE RDCH
2240
2250 \ ***********************************************************************
2260 \ Keyboard scan routine
2270 \ Uitvoer: Accu = ascii waarde (00 -> geen toets gedrukt)
2280 \ ***********************************************************************
2290
2300 :SCAN PHP \ BEWAAR PROCESSOR STATUS
2310 STX #E4 \ BEWAAR GEBRUIKTE REGISTERS
2320 STY #E5
2330 :SCAN1 LDA @#0B \ ZET SEMAFOOR
2340 JSR OSBYTE
2350 BCC SCAN1 \ SPRING INDIEN TOEGANG GEWIJGERD
2360 LDX @#00 \ DEFAULT ASCII WAARDE (geen toets gedrukt)
2370 LDA @#00 \ GEEF SCAN COMMANDO #5D AAN PC
2380 JSR ZENDBYTE
2390 LDA @#5D
2400 JSR ZENDBYTE
2410 JSR LEESBYTE \ LEES KEYBOARD STATUS BYTE VAN PC
2420 LSR A \ TEST OF TOETS INGEDRUKT IS
2430 BCC ENDSCAN \ GEEN TOETS GEDRUKT, BEEINDIG ROUTINE
2440 JSR LEESBYTE \ LEES ASCII WAARDE VAN INGEDRUKTE TOETS
2450 TAX \ ZET IN X-REGISTER
2460 JSR LEESBYTE \ LEES SCAN CODE VAN INGEDRUKTE TOETS
2470 TAY \ ZET IN Y-REGISTER
2480 CPY @#0F \ SPECIALE TOETSEN AFHANDELEN
2490 BNE TEST_BS \ SPRING ALS GEEN COPY TOETS (tab)
2500 LDA @#00 \ PC-COMMANDO #02: LEES TEKEN OP CURSOR POS
2510 JSR ZENDBYTE
2520 LDA @#02
2530 JSR ZENDBYTE
2540 JSR LEESBYTE \ LEES ASCII WAARDE OP CURSOR POSITIE
2550 TAX \ ZET DEZE WAARDE IN X-REGISTER
2560 JMP ENDSCAN \ GA NAAR EINDE SCAN ROUTINE
2570 :TEST_BS CPY @#0E \ TEST OP BACKSPACE TOETS
2580 BNE TST_CUR_U \ SPRING INDIEN GEEN BACKSPACE
2590 LDX @#7F \ LAADT CODE VOOR DELETE
2600 BNE ENDSCAN \ NAAR EINDE SCAN ROUTINE
2610 :TST_CUR_U CPX @#00 \ TEST OP EXTENDED CODE
2620 BNE ENDSCAN \ SPRING ALS EEN NORMALE TOETS GEDRUKT IS
2630 CPY @#48
2640 BNE TST_CUR_L \ SPRING INDIEN GEEN CURSOR UP
2650 LDX @#0B \ LAADT ASCII WAARDE VOOR OMHOOG
2660 BNE ENDSCAN \ NAAR EINDE SCAN ROUTINE
2670 :TST_CUR_L CPY @#4B
2680 BNE TST_CUR_R \ SPRING INDIEN GEEN CURSOR LEFT
2690 LDX @#08 \ LAADT ASCII WAARDE VOOR LINKS
2700 BNE ENDSCAN \ NAAR EINDE SCAN ROUTINE
2710 :TST_CUR_R CPY @#4D
2720 BNE TST_CUR_D \ SPRING INDIEN GEEM CURSOR RIGHT
2730 LDX @#09 \ LAADT ASCII WAARDE VOOR RECHTS
2740 BNE ENDSCAN \ NAAR EINDE SCAN ROUTINE
2750 :TST_CUR_D CPY @#50
2760 BNE ENDSCAN \ SPRING INDIEN GEEM CURSOR DOWN
2770 LDX @#0A \ LAADT ASCII WAARDE VOOR OMLAAG
2780 :ENDSCAN LDA @#0A \ WIS SEMAFOOR
2790 JSR OSBYTE
2800 TXA \ ZET ASCII WAARDE IN ACCU
2810 LDX #E4 \ HERSTEL X EN Y REGISTER
2820 LDY #E5
2830 PLP \ HERSTEL PROCESSOR STATUS
2840 RTS \ EINDE ROUTINE
2850
2860 :LB_ROUT LDA VIA+#D \ LEES STATUS REGISTER
2870 AND @#02 \ TEST OF BYTE KLAAR STAAT
2880 BEQ LB_ROUT \ SPRING INDIEN GEEN BYTE VAN PC
2890 LDA VIA+#1 \ LEES BYTE
2900 RTS \ EINDE ROUTINE
2910
2920 :ZB_ROUT PHA \ BEWAAR BYTE OP STACK
2930 STA VIA+#0 \ STUUR NAAR PC
2940 :ZB_WACHT LDA VIA+#D \ LEES STATUS REGISTER
2950 AND @#10 \ TEST OF BYTE GELEZEN IS
2960 BEQ ZB_WACHT \ SPRING INDIEN NOG NIET GELEZEN DOOR PC
2970 PLA \ HAAL WAARDE TERUG
2980 RTS \ EINDE ROUTINE
2990
3000 .END
3010 RETURN
|