home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
64'er
/
64ER_CD.iso
/
sh3x
/
sh35.d64
/
smon+src
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
1995-03-30
|
8KB
|
432 lines
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 #<NEWCMDS
2640 STA $FD
2650 LDA #(NEWCMDS>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 #<CMDS ;ZEIGER AUF
2860 STA PCL ;BEFEHLSADRESSEN
2870 LDA #(CMDS>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 #<NEWADR ;ZEIGER AUF NEUE
3010 STA PCL ;BEFEHLSADRESSEN
3020 LDA #(NEWADR>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