10 REM > NEWMOS02/S
   20 REM Source for Extended BBC MOS ROM
   30 oscli=&FFF7:OSWORD=&FFF1:OSBYTE=&FFF4
   40 OSWRCH=&FFEE:OSNEWL=&FFE4:OSASCI=&FFE3
   50 nvwrch=&FFCB:DIM mcode% &1000
   60 FOR P=0 TO 1
   70   O%=mcode%:P%=&8000
   80   [OPT P*3+4
   90   JMP lang
  100   JMP serv
  110   EQUB &C2
  120   EQUB copy-&8000
  130   EQUB &02:\ Version
  140   EQUS "Extra Utilities":BRK:EQUS "1.02 (20 Jan 1989)"
  150   .copy
  160   BRK:EQUS "(C)1988 J.G.Harston":BRK
  170   \                   Language part
  180   .lang
  190   LDX #&FF:TXS:CLD:CLI
  200   LDA #err_handler AND 255:STA &202
  210   LDA #err_handler DIV 256:STA &203
  220   .lang_loop
  230   LDA #ASC"*":JSR OSWRCH
  240   LDA #0:LDX #buff AND 255
  250   LDY #(buff) DIV 256
  260   JSR OSWORD: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_handler
  360   LDX &F4:LDA #252:LDY #0:JSR OSBYTE
  370   JSR OSNEWL:JSR report
  380   JMP lang_loop
  390   .report
  400   LDY #1
  410   .errloop
  420   LDA (&FD),Y:BEQ err2
  430   JSR OSWRCH:INY:JMP errloop
  440   .err2
  450   JMP OSNEWL
  460   \                   Service part
  470   .serv7:PHA:LDA &EF:CMP #90:BNE serv7try
  480   LDA &F0:BEQ serv7info:CMP #2:BNE disabled:\ Recognises *FX90,2
  490   LDA &DF0,X:ORA #128:STA &DF0,X:PLA:LDA #0:RTS
  500   .serv7try:CMP #89:BNE disabled
  510   LDA &F0:JSR pr_hex:PLA:LDA #0:RTS
  520   .serv7info:LDA &F1:BEQ serv7help
  530   CMP #1:BNE disabled
  540   JSR pr_text:EQUS "2: ":BRK:JSR pr_title
  550   JMP disabled
  560   .serv7help:LDA #90:LDX #0:LDY #1:JSR OSBYTE
  570   PLA:LDA #0:RTS
  580   .serv
  590   CMP #7:BEQ serv7
  600   PHA:LDA &DF0,X:AND #128:BEQ disabled:PLA
  610   CMP #2:BEQ serv2
  620   CMP #4:BEQ serv4
  630   CMP #6:BEQ serv6:\Errors
  640   CMP #9:BEQ serv9
  650   CMP #&FE:BEQ servFE
  660   RTS
  670   .disabled:PLA:RTS
  680   .serv4:JMP serv4run
  690   .serv6:JSR new_oscli_ret_check:LDA #6:RTS
  700   .serv9:JMP serv9run
  710   .servFE
  720   JSR new_os
  730   LDA #1:STA &267:JSR OSNEWL:JSR pr_title
  740   LDA &28D:BEQ servFEexit
  750   LDA #7:JSR OSWRCH
  760   .servFEexit:JSR OSNEWL:LDA #&FE:RTS
  770   .serv2
  780   TYA:PHA:ORA #128:STA &DF0,X:JSR find_ws:LDY #8:LDA #0:STA (&A8),Y
  790   LDA #3:STA &202:LDA #255:STA &203:LDA #&A8:LDX #0:LDY #&FF:JSR OSBYTE
  800   STX &A8:STY &A9:LDY #3:LDA #err_handler AND&FF:STA (&A8),Y:INY:LDA #err_handler DIV256:STA (&A8),Y:INY:LDA &F4:STA (&A8),Y
  810   TAX:PLA:TAY:INY:LDA #2:RTS
  820   .pr_title:JSR pr_text:EQUS "Extended BBC MOS 1.00":EQUB 13:BRK:RTS
  830   .serv9run
  840   STY &AF:LDA (&F2),Y:CMP #13:BEQ serv9simple
  850   CMP #ASC".":BEQ serv9print:AND #&DF:CMP #ASC"E":BNE serv9exit
  860   INY:LDA (&F2),Y:CMP #ASC".":BEQ serv9print:AND #&DF:CMP #ASC"X":BNE serv9exit
  870   INY:LDA (&F2),Y:CMP #ASC".":BEQ serv9print:AND #&DF:CMP #ASC"T":BNE serv9exit
  880   .serv9print
  890   JSR serv9text
  900   LDA #osc_help_text1 AND 255:STA &AC
  910   LDA #osc_help_text1 DIV 256:STA &AD
  920   LDA #osc_table1 AND 255:STA &A9
  930   LDA #osc_table1 DIV 256:STA &AA
  940   JSR do_help
  950   LDY &AF:LDA (&F2),Y:CMP #ASC".":BEQ serv9exit
  960   LDA #0:RTS
  970   .serv9text
  980   JSR pr_text
  990   EQUB 13:EQUS "Sideways RAM Extension 1.00 ":EQUB 13:BRK
 1000   RTS
 1010   .serv9simple:JSR serv9text
 1020   .serv9exit:LDY &AF:LDA #9:RTS
 1030   .run_help
 1040   STY &AF:LDA (&F2),Y:CMP #13:BNE run_help2
 1050   JSR OSNEWL:JSR pr_title:JSR pr_text:EQUS "  FILE":EQUB 13:EQUS "  MOS":EQUB 13:BRK
 1060   .run_help_end
 1070   LDA #9:LDY &AF:RTS
 1080   .run_help2
 1090   LDA (&F2),Y:CMP #ASC".":BEQ do_help1
 1100   AND #&DF:CMP #ASC"F":BNE not_file_help
 1110   INY:LDA (&F2),Y:CMP #ASC".":BEQ do_help1:AND #&DF:CMP #ASC"I":BNE not_file_help
 1120   INY:LDA (&F2),Y:CMP #ASC".":BEQ do_help1:AND #&DF:CMP #ASC"L":BNE not_file_help
 1130   INY:LDA (&F2),Y:CMP #ASC".":BEQ do_help1:AND #&DF:CMP #ASC"E":BNE not_file_help
 1140   .do_help1
 1150   JSR pr_text:EQUB 13:EQUS "Extended file handler 1.00":EQUB 13:BRK
 1160   LDA #file_os_text AND 255:STA &AC
 1170   LDA #file_os_text DIV 256:STA &AD
 1180   LDA #file_os AND 255:STA &A9
 1190   LDA #file_os DIV 256:STA &AA
 1200   JSR do_help:LDY &AF
 1210   LDA (&F2),Y:CMP #ASC".":BNE run_help_finish
 1220   JMP do_help2
 1230   .run_help_end2:JMP run_help_end
 1240   .not_file_help
 1250   LDA (&F2),Y:AND #&DF:CMP #ASC"M":BNE run_help_end2
 1260   INY:LDA (&F2),Y:CMP #ASC".":BEQ do_help2:AND #&DF:CMP #ASC"O":BNE run_help_end2
 1270   INY:LDA (&F2),Y:CMP #ASC".":BEQ do_help2:AND #&DF:CMP #ASC"S":BNE run_help_end2
 1280   .do_help2
 1290   JSR OSNEWL:JSR pr_title
 1300   LDA #mos_os_text AND 255:STA &AC
 1310   LDA #mos_os_text DIV 256:STA &AD
 1320   LDA #mos_os AND 255:STA &A9
 1330   LDA #mos_os DIV 256:STA &AA
 1340   JSR do_help:LDY &AF
 1350   LDA (&F2),Y:CMP #ASC".":BEQ run_help_end2
 1360   .run_help_finish
 1370   LDA #0:RTS
 1380   .do_help
 1390   TYA:PHA:LDA #&BD:STA &A8:LDA #&60:STA &AB
 1400   LDX #0:LDY #0
 1410   .help_mess_loop
 1420   LDA #32:JSR OSWRCH:JSR OSWRCH
 1430   .help_mess_loop2
 1440   JSR &A8:BEQ help_word
 1450   JSR OSWRCH:INX:CLC:BCC help_mess_loop2
 1460   .help_word
 1470   LDA #32:JSR OSWRCH
 1480   .help_mess_loop3
 1490   LDA (&AC),Y:BEQ help_text_end
 1500   JSR OSWRCH:INY:CLC:BCC help_mess_loop3
 1510   .help_text_end
 1520   JSR OSNEWL
 1530   INY:INX:INX:INX:JSR &A8:CMP #&FF:BNE help_mess_loop
 1540   PLA:TAY:RTS
 1550   .search_table
 1560   LDA #&BD:STA &A8
 1570   LDA #&60:STA &AB
 1580   STY &AF
 1590   LDX #0
 1600   .search_main_loop
 1610   LDY &AF
 1620   .search_loop
 1630   LDA (&F2),Y:CMP #ASC".":BEQ dot
 1640   JSR &A8:CMP (&F2),Y:BNE not_equal
 1650   .equal
 1660   INX:INY:JSR &A8:BEQ zero_byte
 1670   BNE search_loop
 1680   .dot
 1690   JSR fnd_zero1
 1700   INY
 1710   .zero_byte
 1720   INX:JSR &A8:STA &AC
 1730   INX:JSR &A8:STA &AD
 1740   .no_spaces
 1750   LDA (&F2),Y:CMP #32:BNE found_code
 1760   INY:CLC:BCC no_spaces
 1770   .found_code
 1780   CLC:RTS
 1790   .fnd_zero
 1800   INX
 1810   .fnd_zero1
 1820   JSR &A8:BNE fnd_zero
 1830   RTS
 1840   .not_equal
 1850   EOR #32:CMP (&F2),Y:BEQ equal
 1860   JSR fnd_zero
 1870   INX:INX:INX:JSR &A8:CMP #&FF
 1880   BNE search_main_loop
 1890   LDY &AF:SEC:RTS
 1900   .serv4run
 1910   LDA #(osc_table1)MOD 256
 1920   STA &A9
 1930   LDA #(osc_table1)DIV 256
 1940   STA &AA
 1950   .serv4bit:JSR search_table
 1960   BCC serv4go
 1970   LDA #4:LDX &F4:RTS
 1980   .serv4go:LDX &F4
 1990   JSR jump
 2000   LDA #0:RTS
 2010   .jump:JMP (&AC)
 2020   \                       Tables
 2030   .osc_table1
 2040   EQUS "NEWOS":BRK:EQUW new_os_command
 2050   EQUS "NEWOFF":BRK:EQUW rom_disable
 2060   EQUB 255
 2070   .file_os
 2080   EQUS "CAT":BRK:EQUW cat
 2090   EQUS "BUILD":BRK:EQUW build
 2100   EQUS "DUMP":BRK:EQUW dump
 2110   EQUS "EXEC":BRK:EQUW exec
 2120   EQUS "INFO":BRK:EQUW info
 2130   EQUS "LIST":BRK:EQUW list
 2140   EQUS "LOAD":BRK:EQUW load
 2150   EQUS "OPT":BRK:EQUW opt
 2160   EQUS "RUN":BRK:EQUW run
 2170   EQUS "SAVE":BRK:EQUW save
 2180   EQUS "SPOOL":BRK:EQUW spool
 2190   EQUS "TYPE":BRK:EQUW type
 2200   EQUB 255
 2210   .mos_os
 2220   EQUS "FX":BRK:EQUW fx
 2230   EQUS "HELP":BRK:EQUW help
 2240   EQUS "KEY":BRK:EQUW key
 2250   EQUS "MESSAGE":BRK:EQUW message
 2260   EQUS "MEDIT":BRK:EQUW enter
 2270   EQUS "MDUMP":BRK:EQUW examine
 2280   EQUS "OS":BRK:EQUW os
 2290   EQUS "ROMS":BRK:EQUW roms
 2300   EQUS "TAPE":BRK:EQUW tape
 2310   EQUB 255
 2320   .file_os_text
 2330   EQUS "(#<strm>) (<directory>)":BRK
 2340   EQUS "<afsp>":BRK
 2350   EQUS "(#<strm>) <afsp> (<addr>)":BRK
 2360   EQUS "(<afsp>)":BRK
 2370   EQUS "(#<strm>) <afsp>":BRK
 2380   EQUS "(#<strm>) <afsp>":BRK
 2390   EQUS "<afsp> (<load>)":BRK
 2400   EQUS "<opt> (<param>)":BRK
 2410   EQUS "<afsp> (<params>)":BRK
 2420   EQUS "<afsp> <start> <end>|+<length> (<exec> (<load>))":BRK
 2430   EQUS "(<afsp>)":BRK
 2440   EQUS "(#<strm>) <afsp>":BRK
 2450   .mos_os_text
 2460   EQUS "<num> (<param1> (<param2>))":BRK
 2470   EQUS "(#<strm>) <word>":BRK
 2480   EQUS "<key> <text>":BRK
 2490   EQUS "<text>":BRK
 2500   EQUS "<addr>":BRK
 2510   EQUS "(#<strm>) <start> (<end>|+<length>)":BRK
 2520   EQUS "":BRK
 2530   EQUS "(#<strm>)":BRK
 2540   EQUS "(<baud>)":BRK
 2550   .osc_help_text1
 2560   EQUS "":BRK
 2570   EQUS "":BRK
 2580   \                   Routines
 2590   .os
 2600   LDA #142:JMP OSBYTE
 2610   .enter:.examine:.message
 2620   JSR errors:EQUB 254:EQUS "Not yet written":BRK
 2630   .list:.type:.roms:.dump:.build
 2640   .exec:.fx:.key:.load:.opt:.run:.save:.spool:.tape:.rom
 2650   LDY &AF:PLA:PLA:LDA #4:RTS
 2660   .new_os_command:LDA (&F2),Y:CMP #13:BEQ new_os_c2
 2670   CMP #ASC"#":BEQnew_os
 2680   .new_os_c2
 2690   JSR find_ws
 2700   LDY #8:LDA (&A8),Y:BEQ new_os_cont
 2710   JSR errors:EQUB 254:EQUS "NewOs already selected":BRK
 2720   .new_os
 2730   JSR find_ws
 2740   LDY #8:LDA (&A8),Y:BEQ new_os_cont
 2750   RTS
 2760   .new_os_cont
 2770   SEI:LDA #255:STA (&A8),Y:\    NewOS On flag at Y=8
 2780   LDY #4:LDA &208:STA (&A8),Y:INY
 2790   LDA &209:STA (&A8),Y:INY:\    CLIV at Y=4/5
 2800   \Store old FILE_V as well
 2810   LDA #12:STA &208:\LDA #18:\STA &20C
 2820   LDA #21:STA &20E
 2830   LDA #&FF:STA &209:STA &20F:\STA &20D
 2840   LDA #&A8:LDX #0:LDY #&FF:JSR OSBYTE
 2850   STX &A8:STY &A9:LDY #12:LDX &F4
 2860   LDA #new_oscli AND &FF:STA (&A8),Y
 2870   INY:LDA #new_oscli DIV 256:STA (&A8),Y
 2880   INY:TXA:STA (&A8),Y
 2890   LDY #21:LDA #new_vdu AND &FF:STA (&A8),Y
 2900   INY:LDA #new_vdu DIV 256:STA (&A8),Y
 2910   INY:TXA:STA (&A8),Y
 2920   \ Set new osword vectors
 2930   JSR collapse:LDA #0:STA &A8:TAY:INY:STA (&A8),Y
 2940   CLI:CLD:RTS
 2950   .new_oscli
 2960   PHA:TXA:PHA:TYA:PHA:JSR new_oscli_go
 2970   PLA:TAY:PLA:TAX:PLA:RTS
 2980   .new_oscli_go
 2990   STX &F2:STY &F3:LDY #&FF
 3000   .new_oscli_loop
 3010   INY:LDA (&F2),Y:CMP #ASC"*":BEQ new_oscli_loop
 3020   CMP #ASC" ":BEQ new_oscli_loop
 3030   CMP #13:BEQ new_oscli_ret
 3040   CMP #ASC"|":BNE new_oscli1
 3050   .new_oscli_ret:RTS
 3060   .new_oscli_ret_check:JSR find_ws:LDY #2:LDA (&A8),Y:TAX:LDA #255:STA (&A8),Y
 3070   CPX #255:BEQ new_oscli_ret:LDA #18:JSR OSWRCH:LDA #&89:JSR OSWRCH:TXA:JMP OSWRCH
 3080   .new_oscli1
 3090   INY:CMP #ASC":":BEQ do_old_cli:DEY:TYA:PHA
 3100   JSR find_ws:LDY #2:LDA #255:STA (&A8),Y:PLA:TAY
 3110   LDA #file_os AND 255:STA &A9
 3120   LDA #file_os DIV 256:STA &AA
 3130   JSR serv4bit:CMP #0:BEQ new_oscli_ret_check
 3140   LDA #mos_os AND 255:STA &A9
 3150   LDA #mos_os DIV 256:STA &AA
 3160   JSR serv4bit:CMP #0:BEQ new_oscli_ret_check
 3170   .do_old_cli
 3180   STY &AF:JSR find_ws:LDY #4
 3190   LDA (&A8),Y:STA &AC
 3200   INY:LDA (&A8),Y:STA &AD
 3210   LDA &AF:CLC:ADC &F2:TAX
 3220   LDA #0:ADC &F3:TAY:JMP (&AC):\Jump
 3230   \ Misc. routines
 3240   .pr_hex
 3250   PHA:LSR A:LSR A:LSR A:LSR A
 3260   JSR first
 3270   PLA
 3280   .first
 3290   AND #&0F:CMP #10
 3300   BCC over
 3310   ADC #6
 3320   .over
 3330   ADC #48:JMP OSWRCH
 3340   \
 3350   .pr_text
 3360   STA &AE
 3370   PLA:STA &AC:PLA:STA &AD:TXA:PHA:TYA:PHA
 3380   LDY #0:.pr_main_loop
 3390   INC &AC:BNE continue
 3400   INC &AD:.continue
 3410   LDA (&AC),Y
 3420   BEQ end_of_string
 3430   JSR OSASCI:JMP pr_main_loop
 3440   .end_of_string
 3450   INC &AC:BNE pr_exit_end
 3460   INC &AD:.pr_exit_end
 3470   PLA:TAY:PLA:TAX:LDA &AE:JMP (&AC)
 3480   \
 3490   .errors
 3500   PLA:STA &FD:PLA:STA &FE
 3510   LDY #0
 3520   .error_main_loop
 3530   INY:LDA (&FD),Y:STA &100,Y
 3540   BNE error_main_loop
 3550   STA &100:JMP &100
 3560   \
 3570   .check_strm
 3580   TYA:PHA:JSR find_ws:PLA:TAY
 3590   LDA (&F2),Y:CMP #ASC"#"
 3600   BNE check_strm_ret
 3610   JSR nextch
 3620   PHA:JSR nextch:JSR separ
 3630   BCS Bad_Command
 3640   TYA:PHA:LDY #1:LDA (&A8),Y:INY:STA (&A8),Y:PLA:TAY
 3650   LDA #18:JSR OSWRCH:LDA #&89:JSR OSWRCH:PLA:AND #7:JSR OSWRCH
 3660   .check_strm_ret:RTS
 3670   .nextch
 3680   INY:LDA (&F2),Y:CMP #32:BEQ nextch
 3690   RTS
 3700   .separ
 3710   CMP #13:BEQ separ_ret1
 3720   CMP #ASC";":BEQ separ_ret
 3730   CMP #ASC",":BEQ separ_ret
 3740   SEC:RTS
 3750   .separ_ret
 3760   JSR nextch
 3770   .separ_ret1
 3780   CLC:RTS
 3790   .Bad_Command
 3800   JSR errors
 3810   EQUB 254:EQUS "Bad command":BRK
 3820   .Bad_Number
 3830   JSR errors
 3840   EQUB 252:EQUS "Bad number":BRK
 3850   .find_ws
 3860   PHA:LDX &F4:LDA &DF0,X:AND #127:STA &A9:LDA #0:STA &A8:PLA:LDY #0:RTS
 3870   \ 1=window, 2=winpend, 4/5=OldCLI, 8=NewOS On, 16+ windows
 3880   .cat
 3890   JSR check_strm
 3900   TYA:CLC:ADC &F2:PHP:TAX
 3910   LDA #0:PLP:ADC &F3:TAY
 3920   LDA #5:JMP (&21E)
 3930   .help
 3940   JSR check_strm
 3950   JSR run_help
 3960   CMP #9:BNE info_end
 3970   LDA #143:LDX #9:JMP OSBYTE
 3980   .info
 3990   JSR check_strm
 4000   LDA #ASC"I":STA &700
 4010   LDA #ASC"N":STA &701
 4020   LDA #ASC"F":STA &702
 4030   LDA #ASC"O":STA &703
 4040   LDA #ASC" ":STA &704
 4050   LDX #5
 4060   .infoloop
 4070   LDA (&F2),Y:STA &700,X:INY:INX
 4080   CMP #13:BNE infoloop
 4090   LDX #0:LDY #7:LDA #3:JMP (&21E)
 4100   .info_end
 4110   RTS
 4120   .Bad_Number2:JMP Bad_Number
 4130   .rom_disable
 4140   LDA &DF0,X:AND #127:STA &DF0,X
 4150   JSR pr_text:EQUS "Press CTRL-BREAK":BRK
 4160   .rom_dis2:JMP rom_dis2
 4170   :
 4180   :\ Window handler
 4190   :
 4200   .find_wind_addr
 4210   AND #7:PHA
 4220   JSR find_ws
 4230   PLA:ASL A:STA &A8
 4240   ASL A:ASL A:ADC &A8:ADC #&10:STA &A8:RTS
 4250   .new_vdu
 4260   PHA:PHP:TXA:PHA:TYA:PHA
 4270   LDA &A8:PHA:LDA &A9:PHA
 4280   TSX:LDA &106,X
 4290   JSR new_vdu_go
 4300   PLA:STA &A9:PLA:STA &A8
 4310   PLA:TAY:PLA:TAX:PLP:PLA
 4320   RTS
 4330   .new_vdu_go
 4340   JSR find_ws
 4350   PHA:LDA &26A:\ Queue
 4360   CMP #&FF:BEQ last_item
 4370   PLA:BIT &26A:BMI old_jmp
 4380   STA (&A8),Y:\ last_ch at Y=0
 4390   CMP #26:BEQ do_collapse
 4400   .old_jmp
 4410   JMP nvwrch:\ Do this so RS232, SPOOL, etc can have a chance
 4420   .last_item
 4430   LDA (&A8),Y:\ last_ch at Y=0
 4440   CMP #22:BEQ do_mode
 4450   CMP #23:\BEQ do_char
 4460   CMP #18:BEQ do_gcol_etc
 4470   .do_old
 4480   PLA:JMP nvwrch
 4490   .do_ignore
 4500   PLA
 4510   .do_spool
 4520   LDX #&FE:STX &26A:JSR nvwrch:INC &26A:RTS
 4530   .do_mode:PLA
 4540   .do_collapse
 4550   JSR nvwrch
 4560   .collapse
 4570   LDA #7
 4580   .coll_loop
 4590   PHA:JSR save_window
 4600   PLA:SEC:SBC #1:BPL coll_loop
 4610   RTS
 4620   .do_gcol_etc
 4630   LDA &322:CMP #&89:BNE do_ignore:\ GCOL &89,window
 4640   .do_window
 4650   INY:LDA (&A8),Y:\ window at Y=1
 4660   JSR save_window
 4670   PLA:JSR do_spool:LDY #0:STY &A8:INY:AND #7
 4680   STA (&A8),Y:\ window
 4690   JSR get_window
 4700   RTS
 4710   .save_window
 4720   JSR find_wind_addr:LDX #0
 4730   .save_loop
 4740   LDA &308,X:STA (&A8),Y:INY:INX:CPX #4:BCC save_loop
 4750   LDA #134:JSR OSBYTE:TYA:LDY #5
 4760   STA (&A8),Y:DEY:TXA:STA (&A8),Y:INY:INY
 4770   LDA &357:STA (&A8),Y:INY
 4780   LDA &358:STA (&A8),Y:INY
 4790   LDA &D2:STA (&A8),Y:INY
 4800   LDA &D3:STA (&A8),Y:RTS
 4810   .get_window
 4820   PHA
 4830   LDA #3:LDX #&54:LDY #0:JSR OSBYTE:\ select screen only
 4840   PLA:TAY:TXA:PHA:TYA:JSR find_wind_addr
 4850   LDA #28:JSR nvwrch
 4860   .get_w_loop
 4870   LDA (&A8),Y:JSR nvwrch:INY:CPY #4:BCC get_w_loop
 4880   LDA #31:JSR nvwrch
 4890   LDA (&A8),Y:JSR nvwrch:INY
 4900   LDA (&A8),Y:JSR nvwrch:INY
 4910   LDA (&A8),Y:STA &357:INY
 4920   LDA (&A8),Y:STA &358:INY
 4930   LDA (&A8),Y:STA &D2:INY
 4940   LDA (&A8),Y:STA &D3
 4950   PLA:TAX:LDY #0:LDA #3:JMP OSBYTE:\ Restore outputs
 4960   :
 4970   \   Stick new editor here...
 4980   :
 4990   ]
 5000 NEXT P
 5010 PRINT" *SAVE ROM "+STR$~(mcode%)+" "+STR$~(O%+1)+" 0 FFFBBC00"