10
20 oscli=&FFF7:OSWORD=&FFF1:OSBYTE=&FFF4
30 OSWRCH=&FFEE:OSNEWL=&FFE4:OSASCI=&FFE3
40 mcode%=TOP+&1800:HIMEM=mcode%
50 FOR P=0 TO 1
60 O%=mcode%:P%=&8000
70 [OPT P*3+4
80 JMP lang
90 JMP serv
100 EQUB &C2
110 EQUB copy-&8000
120 EQUB 10
130 EQUS "1 Comm. Skeleton ROM":BRK:EQUS "Version string"
140 .copy
150 BRK:EQUS "(C)1987 J.G.Harston":BRK
160 \ Language part
170 .lang
180 LDX #&FF:TXS:CLD:CLI
190 LDA #err AND 255:STA &202
200 LDA #err DIV 256:STA &203
210 .lang_loop
220 LDA #ASC"*":JSR OSWRCH
230 LDA #0:LDX #buff AND 255
240 LDY #buff DIV 256
250 JSR OSWORD
260 BCS escape
270 LDX #0:LDY #7:JSR oscli
280 JMP lang_loop
290 .escape
300 LDA #124:JSR OSBYTE
310 BRK:EQUB 17:EQUS "Escape":BRK
320 .buff
330 EQUW &700
340 EQUB 255:EQUB 32:EQUB 255
350 .err
360 JSR OSNEWL:JSR report
370 JSR OSNEWL:JMP lang_loop
380 .report
390 LDY #1
400 .errloop
410 LDA (&FD),Y:CMP #0:BEQ err2
420 JSR OSWRCH:INY:JMP errloop
430 .err2
440 RTS
450 \ Service part
460 .serv
470 CMP #7:BEQ serv7:\ OSBYTE call
480 PHA:LDA &DF0,X:AND #128:BEQ disabled:PLA
490 CMP #9:BEQ serv9:\ *HELP
500 CMP #4:BEQ serv4:\ *commands
510 RTS
520 .disabled:PLA:RTS
530 .serv7
540 LDA &EF:CMP #91:BNE serv7not:\ *FX to enable ROM
550 LDA &DF0,X:STA &F0:ORA #128:STA &DF0,X:LDA #0:RTS
560 .serv7not:LDA #7:RTS
570 .serv4:JMP serv4run
580 .serv9:\ *HELP handler
590 JSR pr_text
600 EQUB 13:EQUS "Skeleton 1 ROM 1.00":EQUB13
610 BRK:STY &AA
620 LDA (&F2),Y:CMP #ASC".":BEQ help_print:AND #&DF:CMP #ASC"S"
630 BNE help_not:INY:LDA (&F2),Y:CMP #ASC".":BEQ help_print:AND #&DF:CMP #ASC"K"
640 BNE help_not:INY:LDA (&F2),Y:CMP #ASC".":BEQ help_print:AND #&DF:CMP #ASC"E"
650 BNE help_not:INY:LDA (&F2),Y:CMP #ASC".":BEQ help_print:AND #&DF:CMP #ASC"L"
660 BNE help_not
670 .help_print:\ *HELP command lister
680 LDA #(help_mess) AND &FF:STA &A8
690 LDA #(help_mess) DIV 256:STA &A9
700 LDX #0:LDY #0
710 .help_mess_loop
720 LDA #32:JSR OSWRCH:JSR OSWRCH
730 .help_mess_loop2
740 LDA osc_table,X:BEQ help_word
750 JSR OSWRCH:INX:CLC:BCC help_mess_loop2
760 .help_word
770 LDA #32:JSR OSWRCH
780 .help_mess_loop3
790 LDA (&A8),Y:BEQ help_text_end
800 JSR OSWRCH:INY:CLC:BCC help_mess_loop3
810 .help_text_end
820 JSR OSNEWL
830 INY:INX:INX:INX:LDA osc_table,X:CMP #&FF:BNE help_mess_loop
840 .help_not
850 \ Optionally print out word responds to. Eg:
860 \JSR pr_text:\EQUS " SKEL":\EQUB 13:\BRK
870 .help_end
880 LDY &AA:LDX &F4:LDA (&F2),Y:CMP #13:BEQ help_end1
890 CMP #ASC".":BEQ help_end1:LDA #0:RTS
900 .help_end1
910 LDA #9:RTS
920 .serv4run
930 JSR serv4look
940 CMP #0:BEQ serv4look_ok
950 LDA (&F2),Y:AND #&DF:CMP #ASC"H":BNE serv4look2:\ check if H prefix present
960 INY:JSR serv4look:DEY:JMP serv4look_ok
970 .serv4look2:LDA #4:.serv4look_ok
980 RTS
990 .serv4look
1000 TXA:PHA:STY &AF
1010 LDX #0
1020 .serv4_main_loop
1030 LDY &AF
1040 .serv4_loop
1050 LDA (&F2),Y:CMP #ASC".":BEQ dot
1060 CMP osc_table,X:BNE not_equal
1070 .equal
1080 INX:INY:LDA osc_table,X:BEQ zero_byte
1090 BNE serv4_loop
1100 .dot
1110 JSR fnd_zero1
1120 INY
1130 .zero_byte
1140 INX:LDA osc_table,X:STA &A8
1150 INX:LDA osc_table,X:STA &A9
1160 .no_spaces
1170 LDA (&F2),Y:CMP #32:BNE jump_to_code
1180 INY:CLC:BCC no_spaces
1190 .jump_to_code
1200 PLA:TAX:JSR jump
1210 LDA #0:RTS
1220 .jump
1230 JMP (&A8)
1240 .fnd_zero
1250 INX
1260 .fnd_zero1
1270 LDA osc_table,X:BNE fnd_zero
1280 RTS
1290 .not_equal
1300 EOR #32:CMP osc_table,X:BEQ equal
1310 JSR fnd_zero
1320 INX:INX:INX:LDA osc_table,X:CMP #&FF
1330 BNE serv4_main_loop
1340 PLA:TAX:LDY &AF:LDA #4:RTS
1350 \ Tables
1360 .osc_table
1370 EQUS "NOSKEL":BRK:EQUW disable_ROM
1380 EQUB 255
1390 .help_mess
1400 EQUS "":BRK
1410 \ Routines
1420 .pr_hex
1430 PHA:LSR A:LSR A:LSR A:LSR A
1440 JSR first
1450 PLA
1460 .first
1470 AND #&0F:CMP #10
1480 BCC over
1490 ADC #6
1500 .over
1510 ADC #48:JMP OSWRCH
1520 .pr_text
1530 STA &AA
1540 PLA:STA &A8:PLA:STA &A9:TXA:PHA:TYA:PHA:LDY #0
1550 .pr_main_loop
1560 INC &A8:BNE continue:INC &A9
1570 .continue
1580 LDA (&A8),Y:BEQ end_of_string
1590 JSR OSASCI:JMP pr_main_loop
1600 .end_of_string
1610 INC &A8:BNE pr_text_end:INC &A9
1620 .pr_text_end:PLA:TAY:PLA:TAX
1630 LDA &AA:JMP (&A8)
1640 .errors
1650 PLA:STA &A8:PLA:STA &A9
1660 LDY #&FF:LDX #0
1670 .error_main_loop
1680 INY:LDA (&A8),Y:STA &100,X:INX
1690 BNE error_main_loop
1700 LDA #0:STA &100:JMP &100
1710 .Bad_Command
1720 JSR errors
1730 EQUB 254:EQUS "Bad command":BRK
1740 .Bad_Number
1750 JSR errors
1760 EQUB 200:EQUS "Bad Number":BRK
1770 .disable_ROM
1780 LDA &DF0,X:AND #127:STA &DF0,X
1790 JSR pr_text:EQUS "Press CTRL-BREAK":BRK
1800 .dis_ROMloop:JMP dis_ROMloop
1810 ]
1820 NEXT P
1830 PRINT"SAVE ROM "+STR$~(mcode%)+" "+STR$~(O%+1)+" FE524F4D 8000"