terug.gif
10 REM APC - OSBYTE / OSWORD ROUTINES
20 REM ROLAND LEURS (c) 1993-1997
30 ;
40 PASS 2;GOSUB a
50 PASS 1;GOSUB a
60 END
70 ;
80aASM-BEGIN
90 ;
100 .CODE #F900
110 .RAM #7900 
120 .OPTION #40
130 ;
140 :LEESBYTE = #FFC5 \ LEES BYTE VAN PC
150 :ZENDBYTE = #FFC8 \ STUUR BYTE NAAR PC
160 :SEM = #CF \ SEMAFOOR VOOR PC-COMMUNICATIE
170 ;
180 :OSBYTE PHA \ MAAK PLAATS OP STACK VOOR OSBYTE ROUTINE
190 PHA
200 PHA \ SAVE REGISTERS
210 TXA
220 PHA
230 TYA
240 PHA
250 TSX \ STACK POINTER NAAR X REGISTER
260 LDA #103,X \ HERSTEL OUDE ACCU
270 BMI OSERROR \ SPRING BIJ VERKEERD COMMANDO
280 CMP @#0F
290 BPL OSERROR
300 ASL A \ VERDUBBEL OSBYTE NUMMER
310 TAY \ WAARDE NAAR INDEXREGISTER
320 SEC \ ZET CARRY VOOR AFTREKKEN
330 LDA OSBTAB,Y \ ZET SPRONG ADRES OP STACK
340 SBC @1 \ TREK ER 1 VAN AF I.V.M. RTS INSTRUKTIE
350 STA #104,X
360 LDA OSBTAB+1,Y
370 SBC @0
380 STA #105,X
390 PLA \ HERSTEL REGISTERS
400 TAY
410 PLA
420 TAX
430 PLA
440 RTS \ VOER OSBYTE ROUTINE UIT (!)
450 :OSERROR JMP #1C83 \ PROBEER EENS DE XMS AANROEPEN
460 ;
470 :OSBTAB .WORD OSBYTE00, OSBYTE01, OSBYTE02, OSBYTE03
480 .WORD OSBYTE04, OSBYTE05, OSBYTE06, OSBYTE07
490 .WORD #FC5D , OSBYTE09, OSBYTE0A, OSBYTE0B
500 .WORD OSBYTE0C, OSBYTE0D, OSBYTE0E
510 ;
520 .CODE #FA19
530 .RAM #7A19
540 :OSBYTE00 PHA \ SAVE REGISTERS
550 TXA
560 PHA
570 TYA
580 PHA
590 PHP
600 JSR #F7D1 \ DRUK VERSIE TEKST AF
610 .AS "Acorn Atom Personal Computer System R65",#EA
620 LDA @#08 \ BEPAAL PROCESSOR MET OSBYTE #08
630 JSR #FFC2
640 LSR A \ PROCESSOR TYPE IN CARRY ZETTEN
650 BCC OSBYTE00A \ SPRING INDIEN NORMALE 6502
660 LDA @CH"C" \ PRINT 'C' BIJ CMOS PROCESSOR
670 JSR #FFF4
680 :OSBYTE00A JSR #F7D1 \ PRINT DE REST VAN DE TEKST
690 .AS "02",#0D,#0A,#0A
700 .AS "Enhanced Pc Operating Systeem v3.11 - "
710 .AS "(c) Roland Leurs 1997",#0D,#0A,#0A,#EA
720 :RESTORE PLP \ HERSTEL REGISTERS
730 PLA
740 TAY
750 PLA
760 TAX
770 PLA
780 RTS \ EINDE ROUTINE
790 ;
800 :OSBYTE01 LDA @11 \ TEST SEMAFOOR
810 JSR #FFC2
820 BCC OSBYTE01A
830 LDA @#00 \ LAAT PC EEN KEYBOARD SCAN DOEN
840 JSR ZENDBYTE
850 LDA @#01
860 JSR ZENDBYTE
870 JSR LEESBYTE \ LEES RESULTAAT
880 PHA
890 JSR LEESBYTE
900 :OSBYTE01B LDA @10 \ WIS SEMAFOOR
910 JSR #FFC2
920 PLA
930 :OSBYTE01A CMP @#71 \ TEST OP ESCAPE TOETS
940 RTS \ EINDE ROUTINE
950 ;
960 :OSBYTE02 JMP #F67F \ FUNCTIE NIET ONDERSTEUND, ERROR 129
970 ;
980 :OSBYTE03 CPX @#00 \ TEST OPDRACHT
990 BEQ LEESVDU \ SPRING INDIEN VDU MODE OPVRAGEN
1000 CPX @80 \ TEST GEVRAAGDE VDU MODE
1010 BEQ INIT80 \ SPRING INDIEN 80 KOLOMS GEVRAAGD
1020 SEC \ ZET CARRY VOOR FOUT INDICATIE
1030 RTS \ EINDE ROUTINE
1040 :INIT80 LDX @3 \ ZET VECTOREN NAAR STANDAARD VDU
1050 :INIT80_1 LDA #FF8B,X
1060 STA #208,X
1070 DEX
1080 BPL INIT80_1
1090 LDA @22 \ NAAR TEKSTMODE
1100 JSR #FFF4
1110 LDA @3
1120 JSR #FFF4
1130 :LEESVDU LDX @#80 \ LEES VDU STATUS CODE
1140 CLC \ ZET CARRY ALS ALLES IN ORDE IS
1150 RTS \ EINDE ROUTINE
1160 ;
1170 :OSBYTE04 PHA \ SAVE REGISTERS
1180 TXA
1190 PHA
1200 TYA
1210 PHA
1220 LDX @00 \ GENEREER WACHTTIJD VAN 1/18e SECONDE
1230 LDY @01
1240 JSR OSBYTE05
1250 PLA \ HERSTEL REGISTERS
1260 TAY
1270 PLA
1280 TAX
1290 PLA
1300 RTS
1310 ;
1320 :OSBYTE05 PHA \ SAVE ACCU
1330 LDA @11 \ TEST SEMAFOOR
1340 JSR #FFC2
1350 BCC OSBYTE05B \ SPRING ALS TOEGANG GEWEIGERD
1360 LDA @#00 \ SOUND COMMANDO NAAR PC
1370 JSR ZENDBYTE
1380 LDA @25
1390 JSR ZENDBYTE
1400 :OSBYTE05A TXA \ TOONHOOGTE NAAR PC
1410 JSR ZENDBYTE
1420 TYA \ TOONDUUR NAAR PC
1430 JSR ZENDBYTE
1440 LDA @10 \ WIS SEMAFOOR
1450 JSR #FFC2
1460 :OSBYTE05B PLA \ HERSTEL ACCU
1470 RTS \ EINDE ROUTINE
1480 ;
1490 :OSBYTE06 JMP (#224) \ SPRING NAAR EXIT VECTOR
1500 ;
1510 :OSBYTE07 PHP \ SAVE PROCESSOR STATUS
1520 CPX @#00 \ EXIT VECTOR OPVRAGEN
1530 BEQ LEESEXIT \ SPRING INDIEN VECTOR OPVRAGEN
1540 STX #225 \ VECTOR WIJZIGEN -> HIGH BYTE
1550 STY #224 \ LOW BYTE
1560 :LEESEXIT LDY #224 \ LEES EXIT VECTOR
1570 LDX #225
1580 PLP \ HERSTEL PROCESSOR STATUS
1590 RTS
1600 ;
1630 ;
1640 :OSBYTE0E LDA @#0B \ ZET SEMAFOOR
1650 JSR #FFC2
1660 BCC OSBYTE0E
1670 LDA @#00 \ KEYSCAN COMMANDO NAAR PC
1680 JSR ZENDBYTE
1690 LDA @#5D
1700 JSR ZENDBYTE
1710 JSR LEESBYTE \ LEES RESULTAAT
1720 PHA
1730 LSR A
1740 BCC OSBYTE0EA
1750 JSR LEESBYTE
1760 TAX \ ASCII WAARDE NAAR X
1770 JSR LEESBYTE
1780 TAY \ SCAN CODE NAAR Y
1790 :OSBYTE0EA LDA @#0A \ WIS SEMAFOOR
1800 JSR #FFC2
1810 PLA
1820 RTS
1830 ;
1840 .CODE #F98E
1850 .RAM #798E
1860 ;
1870 :LABEL0 JSR #FFF4 \ DEZE ROUTINE MOET GESPAARD BLIJVEN
1880 INY
1890 LDA #ED,Y
1900 CMP @#0D
1910 BNE LABEL0
1920 :LABEL1 INY
1930 JSR #F7FD
1940 CPY @#0E
1950 BCC LABEL1
1960 RTS
1970 ;
1980 :OSBYTE09 PHA \ ZET CTRL-G INFORMATIE
1990 LDA @11 \ TEST SEMAFOOR
2000 JSR #FFC2
2010 BCS OSBYTE09A \ SPRING INDIEN TOEGANG GEKREGEN
2020 JMP OSBYTE05B
2030 :OSBYTE09A LDA @#00
2040 JSR ZENDBYTE
2050 LDA @26
2060 JSR ZENDBYTE
2070 JMP OSBYTE05A
2080 ;
2090 :OSBYTE0A PHA \ INIT PC-COMMUNICATIE SEMAFOOR
2100 LDA @#01
2110 STA SEM
2120 PLA
2130 RTS
2140 ;
2150 :OSBYTE0B LSR SEM \ TEST SEMAFOOR
2160 RTS
2170 ;
2180 :OSBYTE0C TXA \ ZET ERRORCODE IN ACCU
2190 PHA \ ZET TWEE MAAL OP STACK
2200 PHA
2210 JMP (#202) \ SPRING NAAR BRK-VECTOR
2220 ;
2230 :OSBYTE0D LDA @#00 \ GEEF COMMANDO AAN PC
2240 JSR ZENDBYTE
2250 LDA @#1B
2260 JSR ZENDBYTE
2270 LDA #00 \ LAADT FOUTCODE
2280 JSR ZENDBYTE
2290 LDA #01 \ TEST OP DIRECT MODE
2300 ORA #02
2310 BEQ LABEL5
2320 JSR #F7D1 \ DRUK TEKST AF
2330 .AS " in regel ",#EA
2340 LDA @#00 \ ZET REGELNUMMER IN BASIC STACK
2350 STA #43
2360 STA #34
2370 LDA #02
2380 STA #25
2390 LDA #01
2400 STA #16
2410 JSR #C589 \ DRUK REGELNUMMER DECIMAAL AF
2420 :LABEL5 JMP #FFED \ EINDE OSBYTE ROUTINE
2430 ;
2440 .CODE #FA08
2450 .RAM #7A08
2460 ;
2470 :LABEL2 INC #00,X
2480 BNE LABEL3
2490 INC #01,X
2500 :LABEL3 LDA #00,X
2510 CMP #02,X
2520 BNE LABEL4
2530 LDA #01,X
2540 CMP #03,X
2550 :LABEL4 RTS
2560 ;
2570 .END
2580 RETURN
terug.gif