100 SYS9*4096 110 .OPT OO 130 ; 140 ; !SMON-ERWEITERUNG 150 ; ERWEITERT SMON UM FOLGENDE 160 ; BEFEHLE - H ADR1 (ADR2) 170 ; - Z ADR1 (ADR2) 180 ; - N ADR1 (ADR2) 190 ; - U ADR1 (ADR2) 200 ; - E ADR1 ADR2 210 ; - Y BYTE 220 ; - Q ADR1 230 ; - J 240 ; 250 ;------------------------------ 260 ; 'H' 270 ; 280 ; BILDET JEWEILS DREI BYTES 290 ; IN BINAERDARSTELLUNG AB. 300 ; (FUER SPRITE-DATEN) 310 ;------------------------------ 320 ; 'Z' (ZEICHEN) 330 ; 340 ; BILDET JEWEILS EIN BYTE 350 ; IN BINAERDARSTELLUNG AB. 360 ; (FUER CHARACTER-DATEN) 370 ;------------------------------ 380 ; 'N' (NORMAL) 390 ; 400 ; BILDET 32 BYTES ALS BILD- 410 ; SCHIRM-CODE AB.(+ ADR!) 420 ;------------------------------ 430 ; 'U' (UEBERSICHT) 440 ; 450 ; BILDET 40 BYTES ALS BILD- 460 ; SCHIRM-CODE AB. 470 ;------------------------------ 480 ; 'E' (ERASE) 490 ; 500 ; FUELLT BEREICH VON ADR1 510 ; BIS ADR2 MIT $00. 520 ;------------------------------ 530 ; 'Y' 540 ; 550 ; SCHREIBT SMON AUF 560 ; $BYTE00 UM. 570 ;------------------------------ 580 ; 'Q' 590 ; 600 ; KOPIERT ZEICHENSATZ 610 ; NACH ADR1. 620 ;------------------------------ 630 ; 'J' 640 ; 650 ; HOLT LETZTEN AUSGABE- 660 ; BEFEHL (H,Z,N,U,K,M,D) 670 ; ZURUECK. 680 ;------------------------------ 690 ; 700 S = $C000 ;BASISADRESSE SMON 710 ; 720 HCH ="(" ;HIDDEN COMMANDS 730 HCZ =")" 740 HCN ="!" 750 ; 760 FLAG =$AA 770 TEMP =$AB 780 PCL =$FB 790 PCH =$FC 800 HINIBBLE =$FF 810 ; 820 CMDS =S+$02B 830 GET12ADR =S+$264 840 GET2ADR =S+$27A 850 GETADR1 =S+$27E 860 GETBYT =S+$28D 870 SKIPSPAC =S+$2B8 880 GETRET =S+$2C2 890 GETCHRER =S+$2CA 900 ERROR =S+$2D1 910 EXECUTE =S+$2D6 920 CMDSTORE =S+$2FF 930 CHARRET =S+$340 940 RETURN =S+$351 950 HEXOUT =S+$323 960 PCINC =S+$367 970 ASCII4 =S+$44F 980 ASCII5 =S+$456 990 CONTIN =S+$45D 1000 OCCUPY =S+$9C7 1010 ;------------- 1011 *= S+38 1012 .BYTE 00 ;ALTEN Z-BEFEHL LOESCHEN 1013 ; 1020 *= S+$61 1030 ; 1040 HCMDTAB .ASC "':;," 1050 .BYTE HCH,HCZ,HCN 1060 ; 1070 *=S+$2E3 1080 ; 1090 LDX #6 ;ZEILENANFANG 1100 F1 CMP HCMDTAB,X 1110 BEQ EXEC1 1120 DEX 1130 BPL F1 1140 LDA #"." 1150 JSR $FFD2 1160 ; 1170 EXEC1 JSR GETCHRERR 1180 CMP #"." 1190 BEQ EXEC1 1200 JMP LINSTORE 1210 WEITER JMP MORECMD 1220 ; 1230 *=S+$30D ;WEITERE BEFEHLE 1240 ; 1250 BEQ WEITER 1260 ; 1270 *=S+$E09 ;NEUE ROUTINEN 1280 ; 1290 ;------------- 1300 ; 1310 ZCMD LDA #$80 ;FLAG SETZEN 1320 .BYTE $2C 1330 ; 1340 HCMD LDA #0 1350 STA TEMP 1360 JSR GET12ADR ;START/END-ADRESSE 1370 ; 1380 L1 BIT TEMP 1390 BPL W8 1400 LDX #HCZ ;HIDDEN COMMAND 1410 .BYTE $2C ;AUSGEBEN 1420 W8 LDX #HCH 1430 JSR CHARRET 1440 JSR HEXOUT ;PC AUSGEBEN 1450 LDY #6 ;SPALTE 6 1460 ; 1470 L2 LDX #0 1480 LDA (PCL,X) 1490 ; 1500 L3 ASL 1510 PHA ;BYTE MERKEN 1520 BCS BITSET ;BIT=1, DANN * 1530 LDA #"." ;BIT=0, DANN . 1540 .BYTE $2C ;AUSGEBEN 1550 BITSET LDA #"*" 1560 STA ($D1),Y 1570 LDA $286 1580 STA ($F3),Y 1590 ; 1600 PLA ;BYTE ZURUECKHOLEN 1610 INY ;CURSOR WEITER 1620 INX ;NAECHSTES BYTE 1630 CPX #8 ;8 BIT 1640 BNE L3 ;BYTE WEITERSCHIEBEN 1650 ; 1660 JSR PCINC ;ZAEHLER ERHOEHEN 1670 BIT TEMP ;FLAG FUER 1*8 BIT 1680 BMI W9 ;ZEILE FERTIG 1690 CPY #30 ;3 BYTES 1700 BCC L2 1710 W9 JSR CONTIN ;TASTEN-ABFRAGE 1720 BCC L1 1730 RTS 1740 ; 1750 ;------------- 1760 ; 1770 ZCMDH LDY #8 1780 .BYTE $2C ;1 BYTE 1790 ; 1800 HCMDH LDY #24 ;3 BYTE 1810 JSR GETADR1 1820 JSR SKIPSPACE ;SPACES UEBERLESEN 1830 A1 LDX #8 1840 LDA #0 1850 STA FLAG 1860 ; 1870 A2 JSR GETCHRERR 1880 CMP #"." ;. => BIT=0 1890 BEQ BIT0 ;* => BIT=1 1900 CMP #"*" 1910 BEQ BIT1 1920 ERR1 JMP ERROR ;ANDERES ZEICHEN 1930 ; 1940 BIT0 CLC 1950 BIT1 ROL FLAG 1960 DEY 1970 DEX ;BYTE 1980 BNE A2 ;NOCH NICHT FERTIG 1990 ; 2000 LDA FLAG ;IN SPEICHER 2010 STA (PCL,X) ;SCHREIBEN 2020 CMP (PCL,X) 2030 BNE ERR1 2040 JSR PCINC 2050 ; 2060 CPY #0 2070 BNE A1 ;NOCH NICHT FERTIG 2080 RTS 2090 ; 2100 ;------------- 2110 ; 2120 NCMD LDA #$80 2130 .BYTE $2C 2140 UCMD LDA #0 2150 STA TEMP 2160 JSR GET12ADR 2170 ; 2180 L5 JSR RETURN 2190 BIT TEMP 2200 BPL U 2210 LDA #HCN ;HIDDEN COMMAND 2220 JSR $FFD2 2230 JSR HEXOUT 2240 LDY #8 ;SPALTE 8 2250 .BYTE $2C 2260 ; 2270 U LDY #0 ;SPALTE 0 2280 LDX #0 2290 ; 2300 L4 LDA (PCL,X) 2310 JSR ASCII4 ;ALS BILDSCHIRM-CODE 2320 BNE L4 ;AUSGEBEN 2330 ; 2340 JSR CONTIN 2350 BCC L5 ;NAECHSTE ZEILE 2360 RTS 2370 ;------------- 2380 NCMDH JSR GETADR1 2390 LDX #0 2400 LDY #8 ;SPALTE 8 2410 C1 LDA ($D1),Y 2420 STA (PCL,X) ;IN SPEICHER 2430 CMP (PCL,X) ;SCHREIBEN 2440 BNE ERR1 2450 JSR ASCII5 ;PC ERHOEHEN 2460 BCC C1 2470 RTS ;ZEILE FERTIG 2480 ; 2490 ;------------- 2500 ; 2510 YCMD JSR GETBYT 2520 AND #%11110000 2530 STA HINIBBLE ;NEUER 4K-BLOCK 2540 JSR SETPTR ;ADRESSEN SETZEN 2550 JSR $79D6 ;W-BEFEHL 2560 ; 2570 JSR SETPTR 2580 LDA #$14 ;BEREICH OHNE 2590 STA $FB ;TABELLEN 2600 LDA #2 2610 ORA HINIBBLE 2620 STA $FC 2630 LDA #8 & $F) 2660 ORA HINIBBLE 2670 STA $FE 2680 JSR $7A68 ;V-BEFEHL 2690 ; 2700 LDY #0 ;LADE-BEFEHLE 2710 LDX #13 ;ANPASSEN 2720 D3 LDA CHANGE,X 2730 ORA HINIBBLE 2740 STA PCH ;ADRESSE ALS ZEIGER 2750 DEX 2760 LDA CHANGE,X 2770 STA PCL 2780 LDA (PCL),Y 2790 AND #%00001111 2800 ORA HINIBBLE 2810 STA (PCL),Y 2820 DEX 2830 BPL D3 2840 ; 2850 LDA #8 & $F) 2880 ORA HINIBBLE 2890 STA PCH 2900 ; 2910 LDY #53 2920 D1 LDA (PCL),Y 2930 AND #%00001111 2940 ORA HINIBBLE ;HIBYTES 2950 STA (PCL),Y ;ANGLEICHEN 2960 W1 DEY 2970 DEY 2980 BPL D1 2990 ; 3000 LDA #8 & $F) 3030 ORA HINIBBLE 3040 STA PCH 3050 ; 3060 LDY #TABEND-NEWADR-1 3070 D2 LDA (PCL),Y 3080 AND #%00001111 3090 ORA HINIBBLE ;HIBYTES 3100 STA (PCL),Y ;ANGLEICHEN 3110 DEY 3120 DEY 3130 BPL D2 3140 RTS 3150 ; 3160 ; 3170 SETPTR LDA HINIBBLE 3180 STA $A9 ;NEUER START HI 3190 JSR GETHI 3200 GETHI PLA 3210 PLA 3220 AND #%11110000 3230 STA $A5 ;ALTER START HI 3240 CLC 3250 ADC #$10 3260 STA $A7 ;ALTES ENDE HI 3270 ; 3280 LDA #0 ;LO-BYTES LOESCHEN 3290 STA $A4 3300 STA $A6 3310 STA $A8 3320 RTS 3330 ; 3340 ;--------- 3350 ; 3360 ECMD JSR GET2ADR 3370 LDA #0 3380 JMP OCCUPY 3390 ; 3400 ;--------- 3410 ; 3420 QCMD JSR GETADR1 3430 LDY #0 3440 LDA #$D0 ;ZEIGER AUF 3450 STY $FD ;ZEICHENROM 3460 STA $FE 3470 ; 3480 SEI 3490 LDA #%011 ;ROM EINBLENDEN 3500 STA 1 3510 LDX #16 ;4K UEBERTRAGEN 3520 E1 LDA ($FD),Y 3530 STA (PCL),Y 3540 INY 3550 BNE E1 3560 INC PCH 3570 INC $FE 3580 DEX 3590 BNE E1 3600 LDA #$27 ;NORMALEINSTELLUNG 3610 STA 1 3620 CLI 3630 RTS 3640 ; 3650 ;--------- 3660 ; 3670 LINSTORE PHA ;BEFEHL MERKEN 3680 CMP #"J" 3690 BNE STORE 3700 ; 3710 LDY #39 3720 G1 LDA $0200,Y 3730 STA ($D1),Y ;ZEILE AUF 3740 DEY ;BILDSCHIRM 3750 BPL G1 ;SCHREIBEN 3760 PLA 3770 DEC $D6 ;CURSOR 1 HOCH 3780 JMP EXECUTE 3790 ; 3800 STORE LDY #6 3810 G3 CMP OUTCMDS,Y 3820 BNE W3 3830 ; 3840 OK1 LDY #39 3850 G2 LDA ($D1),Y 3860 STA $0200,Y ;ZEILE NUR BEI 3870 DEY ;H,Z,N,U,K,M,D 3880 BPL G2 ;SPEICHERN 3890 ; 3900 W3 DEY 3910 BPL G3 3920 STEND PLA ;BEFEHL ZURUECKHOLEN 3930 JMP CMDSTORE 3940 ; 3950 ;+++++++++ 3960 ; 3970 MORECMD LDX #NEWADR-NEWCMDS-3 3980 B1 CMP NEWCMDS-1,X 3990 BEQ FOUND 4000 DEX 4010 BNE B1 4020 JMP ERROR 4030 ; 4040 FOUND JSR CMDEXEC2 4050 JMP EXECUTE 4060 ; 4070 CMDEXEC2 TXA 4080 ASL 4090 TAX 4100 LDA NEWADR-1,X 4110 PHA 4120 LDA NEWADR-2,X 4130 PHA 4140 RTS 4150 ; 4160 NEWCMDS .BYTE HCH,HCZ,HCN 4170 .ASC "EYQ" 4180 OUTCMDS .ASC "HZNUDKM" 4190 ; 4200 NEWADR .WORD HCMDH-1 4210 .WORD ZCMDH-1 4220 .WORD NCMDH-1 4230 .WORD ECMD-1 ;E 4240 .WORD YCMD-1 ;Y 4250 .WORD QCMD-1 ;Q 4260 .WORD HCMD-1 ;! 4270 .WORD ZCMD-1 ;Z 4280 .WORD NCMD-1 ;N 4290 .WORD UCMD-1 ;U 4300 TABEND = * 4310 ; 4320 CHANGE .WORD $0005+1 4330 .WORD $0386+1 4340 .WORD $0C2C+1 4350 .WORD $0C5B+1 4360 .WORD $0CF4+1 4370 .WORD $0DA1+1 4380 .WORD $0E03+1