10
20
30
40
50 :
60 IF PAGE>&8000:SYS "OS_GetEnv"TOA$:IFLEFT$(A$,5)<>"B6502":OSCLI"B6502"+MID$(A$,INSTR(A$," "))
70 ON ERROR REPORT:PRINT" at line ";ERL:END
80 :
90 kernel$="Kernel65"
100 sbasic$=":Software.BBCBasic.System.SBASIC2":brk%=&3403
110 save$ ="Atom65"
120 title$ ="65Tube"
130 PROCassem
140 :
150 kernel$="KernelCP"
160 sbasic$=":Software.BBCBasic.System.SBASIC2":brk%=&3403
170 save$ ="AtomCP"
180 title$ ="6502 CoPro"
190 PROCassem
200 END
210 :
220 DEFPROCassem
230 IOADDR=&FEE0
240 DIM mcode% &5000
250 FOR P=0 TO 1
260 P%=&400:O%=mcode%
270 [OPT P*3+4
280 .exec%
290 JMP Start:BRK:BRK:BRK
300 EQUB &42:EQUB copy-exec%
310 EQUB &10:EQUS "Atom/System Environment for "+title$
320 EQUB &00:EQUS "0.10 (12-Feb-2012)"
330 .copy
340 EQUB &00:EQUS "(C)J.G.Harston":BRK
350 EQUS STRING$(12-LENtitle$,CHR$0)
360 .ctrl
370 EQUW &100:EQUD 0:EQUB &FF :\ Load to file's address
380 .Start
390 LDA #1:LDX #&00
400 LDY #0:JSR &FFDA :\ Find command line
410 .cmdlp
420 TYA:PHA
430 LDX #0:LDY #0
440 LDA #5:JSR &FFF1 :\ Fetch byte from I/O
450 INC &00:BNE next:INC &01:BNE next
460 INC &02:BNE next:INC &03
470 .next
480 PLA:TAY
490 LDA &04:STA &100,Y :\ Store locally
500 INY:CMP #13:BNE cmdlp :\ Loop until <cr>
510 LDA &100:CMP #13
520 PHP:BEQ nofile :\ No filename
530 LDX #ctrl AND 255
540 LDY #ctrl DIV 256
550 LDA #&FF:JSR &FFDD :\ Load file
560 LDA ctrl+6:STA entry+0 :\ Set entry address
570 LDA ctrl+7:STA entry+1
580 .nofile
590 LDA #12:JSR &FFEE
600 SEI
610 LDA #buffer AND 255:STA &00 :\ src=buffer
620 LDA #buffer DIV 256:STA &01
630 LDY #&00:STY &02 :\ dest=&F800, Y=0
640 LDA #&F8:STA &03
650 .loop1
660 LDA &03
670 CMP #IOADDR DIV 256:BNE copymos :\ Skip IO addresses
680 CPY #IOADDR AND 255:BCS skipmos :\ at &FEF0-&FEFF
690 .copymos
700 LDA (&00),Y:STA (&02),Y :\ copy MOS
710 .skipmos
720 INY:BNE loop1
730 INC &01:INC &03:BNE loop1
740 PLP:BNE enter :\ file loaded, enter it
750 LDA entry+0:STA &02 :\ application start address
760 LDA entry+1:STA &03
770 .loop2
780 LDA (&00),Y:STA (&02),Y :\ copy application
790 INY:BNE loop2
800 INC &01:INC &03
810 LDA &03:CMP #&F8:BNE loop2
820 .enter
830 LDA entry+0:STA &EC :\ set entry point
840 LDA entry+1:STA &ED
850 JMP (&FFFC) :\ start Atom/System MOS
860 .entry
870 EQUW &A000
880 .buffer
890 ]NEXT
900 OSCLI "Load "+kernel$+" "+STR$~O%
910 OSCLI "Load "+sbasic$+" "+STR$~(O%+&800)
920 ?(O%+&800+brk%)=0:?(O%+&800+brk%+4)=0:
930 A$=save$+" "+STR$~mcode%+" "+STR$~(O%+&4800)+" 400 400"
940 PRINT"Saving ";A$;
950 OSCLI"Save "+A$:PRINT
960 ENDPROC