*BASIC 10 Copyright (C) Peter Turnbull 1986 20DIM buffer% 512 30PROCassemble_reset 40OSCLI"SAVE Reset "+STR$~(buffer%+20)+" "+STR$~(O%)+" FFFF2804 FFFF2800" 50PROCassemble_park 60OSCLI"SAVE Park "+STR$~(buffer%+20)+" "+STR$~(O%)+" FFFF2804 FFFF2800" 70PROCassemble_boot 80FOR I%=O% TO buffer%+280 STEP 4:!I%=0:NEXT 90OSCLI"SAVE Boot "+STR$~(buffer%+20)+" "+STR$~(buffer%+20+257)+" FFFF2804 FFFF2800" 100REM In the original there was code here to assemble a wrapper 110REM for the BASIC formatter, to make a STAR command 120REM Now put it all together... 130CLEAR:HIMEM=&2800:DIM X% 127,buffer% 15:T%=&2800:PRINT 140OSCLI"load Xebec "+STR$~(T%):T%=FNtop("Xebec"):PRINT;~T% 150OSCLI"load Reset "+STR$~(T%):T%=FNtop("Reset"):PRINT;~T% 160OSCLI"load Park "+STR$~(T%):T%=FNtop("Park"):PRINT;~T% 170OSCLI"load Boot "+STR$~(T%):T%=FNtop("Boot"):PRINT;~T% 180IF T%>&52C0 THEN P."Too big":STOP 190REM OSCLI"load Save "+STR$~(T%):T%=FNtop("Save"):PRINT;~T% 200REM Lines here to merge the formatter program 210REM with the wrapper just loaded 220REM and then OSCLI"save XebecForm 2800 "+STR$~(T%)+" "+STR$~(B%) 230END 240: 1000DEF FNtop($buffer%) 1010!X%=buffer%:Y%=X% DIV 256:A%=5:CALL &FFDD 1020=T%+X%!10 1030: 4920DEF PROCassemble_reset 4930FOR I%=4 TO 6 STEP 2 4940P%=&2800:O%=buffer%+20 4950[OPT I% 4960jmp open:nop:ldy #0 4970.start lda (&F2),Y:iny:cmp #32:beq start 4980.start1 lda (&F2),Y:iny:cmp #13:beq open:cmp #32:bne start1 4990.start2 lda (&F2),Y:iny:cmp #13:beq open:cmp #32:beq start2 5000cmp #ASC"0":bcc bad:cmp #ASC"2":bcc select:sbc #17 5010cmp #ASC"0":bcc bad:cmp #ASC"2":bcc select 5020.bad brk:EQUB 148:EQUS "Bad drive"+CHR$0 5030.select sta dir%+5:lda #ASC":":sta dir%+4:ldx #dir%MOD256:ldy #dir%DIV256:jsr &FFF7 5040.open lda #&40:ldx #name%MOD256:ldy #name%DIV256:jsr &FFCE:sta osgbpb%:ora #0:bne opened 5050.badfile brk:EQUB 214:EQUS "No Info file"+CHR$0 5060.opened lda #0:ldx #12:.loop sta osgbpb%,X:dex:bne loop 5070lda #parm%MOD256:sta osgbpb%+1:lda #parm%DIV256:sta osgbpb%+2 5080lda #255:sta osgbpb%+3:sta osgbpb%+4 5090lda #8:sta osgbpb%+5:lda #242:sta osgbpb%+9:lda #1:sta osgbpb%+10 5100lda #3:ldx #osgbpb%MOD256:jsr &FFD1:bcs badfile:lda #0:ldy osgbpb%:jsr &FFCE 5110lda #&72:ldx #osword%MOD256:ldy #osword%DIV256:jmp &FFF1 5120.osgbpb% EQUB 0:EQUD 0:EQUD 0:EQUD 0 5130.name% EQUS "$.Format.Drive_Info"+CHR$13 5140.dir% EQUS "DIR "+CHR$13 5150.osword% EQUB 0:EQUD parm% OR &FFFF0000:EQUB &0C:EQUD 0:EQUB 0:EQUD 8 5160.parm% EQUD 0:EQUD 0 5170] 5180NEXT I% 5190ENDPROC 5200: 5210DEF PROCassemble_park 5220FOR I%=4 TO 6 STEP 2 5230P%=&2800:O%=buffer%+20 5240[OPT I% 5250jmp open:nop:ldy #0 5260.start lda (&F2),Y:iny:cmp #32:beq start 5270.start1 lda (&F2),Y:iny:cmp #13:beq default:cmp #32:bne start1 5280.start2 lda (&F2),Y:iny:cmp #13:beq default:cmp #32:beq start2 5290cmp #ASC"0":bcc bad:cmp #ASC"2":bcc select:sbc #17 5300cmp #ASC"0":bcc bad:cmp #ASC"2":bcc select 5310.bad brk:EQUB 148:EQUS "Bad drive"+CHR$0 5320.default ldx #parm%MOD256:stx osgbpb%+1:ldy #parm%DIV256:sty osgbpb%+2:ldx #&FF:stx osgbpb%+3:stx osgbpb%+4 5330ldx #2:stx osgbpb%+5:lda #6:ldx #osgbpb%MOD256:jsr &FFD1:lda parm%+1 5340.select sta dir%+5:and #1:sta osword%+6:lda #ASC":":sta dir%+4:ldx #dir%MOD256:ldy #dir%DIV256:jsr &FFF7 5350.open lda #&40:ldx #name%MOD256:ldy #name%DIV256:jsr &FFCE:sta osgbpb%:ora #0:bne opened 5360.badfile brk:EQUB 214:EQUS "No Info file"+CHR$0 5370.opened lda #0:ldx #12:.loop sta osgbpb%,X:dex:bne loop 5380lda #parm%MOD256:sta osgbpb%+1:lda #parm%DIV256:sta osgbpb%+2 5390lda #&FF:sta osgbpb%+3:sta osgbpb%+4 5400lda #13:sta osgbpb%+5:lda #242:sta osgbpb%+9:lda #1:sta osgbpb%+10 5410lda #3:ldx #osgbpb%MOD256:jsr &FFD1:bcs badfile:lda #0:ldy osgbpb%:jsr &FFCE 5420clc:lda parm%+10:ldx parm%+1:sta osword%+8:adc #1:sta parm%+1:stx parm%+10 5430lda parm%+9:ldx parm%:sta osword%+7:adc #0:sta parm%:stx parm%+9 5440ldy parm%+2:dey:beq roll:.multiply clc:lda osword%+8:adc parm%+1::sta osword%+8 5450lda osword%+7:adc parm%:sta osword%+7:dey:bne multiply 5460.roll ldy #5:.rloop clc:rol osword%+8:rol osword%+7:rol osword%+6:dey:bne rloop 5470lda #&72:ldx #osword%MOD256:ldy #osword%DIV256:jsr &FFF1 5480lda #&0B:sta osword%+5:lda #0:sta osword%+11:lda #&72:jsr &FFF1 5490sec:lda parm%+1:ldx parm%+10:sbc #1:sta parm%+10:stx parm%+1 5500lda parm%:ldx parm%+9:sbc #0:sta parm%+9:stx parm% 5510lda #&0C:sta osword%+5:lda #8:sta osword%+11:lda #&72:ldx #osword%MOD256:jmp &FFF1 5520.osgbpb% EQUB 0:EQUD 0:EQUD 0:EQUD 0 5530.name% EQUS "$.Format.Drive_Info"+CHR$13 5540.dir% EQUS "DIR "+CHR$13 5550.osword% EQUB 0:EQUD parm% OR &FFFF0000:EQUB &0C:EQUD 0:EQUB 0:EQUD 8 5560.parm% EQUW 0:EQUB 0:EQUW 0:EQUW 0:EQUB 0:EQUB 0:EQUW 0:EQUB 0:EQUB 0 5570] 5580NEXT I% 5590ENDPROC 5600: 5610DEF PROCassemble_boot 5615FOR I%=buffer%+20 TO buffer%+277 STEP 4:!I%=0:NEXT I% 5620FOR I%=4 TO 6 STEP 2 5630P%=&2800:O%=buffer%+20 5640[OPT I% 5650ldx #dir%MOD256:ldy #dir%DIV256:jsr &FFF7 5660ldx #cmd%MOD256:ldy #cmd%DIV256:jmp &FFF7 5670.dir% EQUS "LIB Library"+CHR$13 5680.cmd% EQUS "/Reset"+CHR$13 5690] 5700NEXT I% 5710ENDPROC 5720: 6000DEF PROCassemble_save 6460ENDPROC