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