DEF START Show where program starts. AORG >3000 START B @START1 Go to actual start of program. FILE02 TEXT 'H ' PATH & FILENAME EVEN PAB DATA >0500,>0FF0,>0000,>2000 Data for Peripheral access BYTE >00 block. FILENM BYTE >0C Length byte, pathname.filename TEXT 'DSK1.GROMCF' INCREM TEXT 'G ' VDPWA EQU >8C02 VDP WRITE address register VDPRD EQU >8800 VDP READ DATA REGISTER BUFFER EQU >0FC0 PABADR EQU >0F80 WR BSS >20 Save space for workspace. START1 CLR @>837C LWPI >83E0 Load workspace. CLR R0 LI R1,>D237 37D2 swapped MOVB R1,*R15 SWPB R1 MOVB R1,*R15 now it's in the right order MOVB @>8800,R0 get byte CI R0,>AA00 is it AA? JEQ YAYSAV LI R1,>37D8 37D8 YAYSAV DEC R1 MOV R1,@>8370 save value LWPI WR Load workspace. LI R0,>0000 Set VDP register 0. BLWP @VWTR LI R1,>E000 MOVB R1,@>83D4 LI R0,>01E0 Set VDP register 1. BLWP @VWTR LI R0,>0200 Set VDP register 2. BLWP @VWTR LI R0,>030E Set VDP register 3. BLWP @VWTR LI R0,>0401 Set VDP register 4. BLWP @VWTR LI R0,>0717 Set VDP register 7. BLWP @VWTR LI R0,>0380 Get ready to load color table. LI R1,>1717 Set reg. 1 to color >17. TABLE BLWP @VSBW Load 1 byte. INC R0 Increment one byte. CI R0,>03A0 Done yet? JNE TABLE No, load another byte. FILE1 LI R0,PABADR LI R1,PAB LI R2,25 BLWP @VMBW LI R6,PABADR+9 MOV R6,@>8356 BLWP @DSRLNK DATA 8 NOP LI R0,>0FF6 LI R1,>A000 LI R2,>1FFA BLWP @VMBR SEL02 LI R9,FILE02 LI R10,INCREM LI R4,4 BL @MOVBTS LI R0,PABADR LI R1,PAB LI R2,25 BLWP @VMBW LI R6,PABADR+9 MOV R6,@>8356 BLWP @DSRLNK DATA 8 NOP LI R0,>0FF6 LI R1,>BFFA LI R2,>1FFA BLWP @VMBR NOP B @>A000 ******************************************************************************* MOVBTS MOVB *R9+,*R10+ DEC R4 JGT MOVBTS RT ******************************************************************************* * UTILITIES * ******************************************************************************* SET DATA >2000 SAVE DATA 0 REGS BSS 32 EVEN VMBW DATA REGSV,V1 REGSV DATA 0,0,0,>8C02 DATA >8C00,0,>8800,0 DATA >4000,>8000,0,0 DATA 0,0,0,0 V1 MOV R13,R7 MOV *R7+,R0 MOV *R7+,R1 MOV *R7+,R2 SWPB R0 MOVB R0,*R3 SWPB R0 SOC R8,R0 MOVB R0,*R3 NOP V2 MOVB *R1+,*R4 DEC R2 JNE V2 RTWP VSBW DATA REGSV,V3 V3 MOV R13,R7 MOV *R7+,R0 SWPB R0 MOVB R0,*R3 SWPB R0 SOC R8,R0 MOVB R0,*R3 NOP MOVB *R7,*R4 RTWP VWTR DATA REGSV,V4 V4 MOV *R13,R0 SOC R9,R0 SWPB R0 MOVB R0,*R3 SWPB R0 MOVB R0,*R3 RTWP VSBR DATA REGSV,V5 V5 MOV R13,R7 MOV *R7+,R0 SWPB R0 MOVB R0,*R3 SWPB R0 MOVB R0,*R3 NOP MOVB *R6,*R7 RTWP VMBR DATA REGSV,V6 V6 MOV R13,R7 MOV *R7+,R0 MOV *R7+,R1 MOV *R7+,R2 SWPB R0 MOVB R0,*R3 SWPB R0 MOVB R0,*R3 V7 MOVB *R6,*R1+ DEC R2 JNE V7 RTWP DSRLNK DATA REGSD,D1 REGSD DATA 0,0,0,0,0 DEVA DATA 0,0,0,0,0,0,0,0,0,0,0 DCRU DATA 0 DSENT DATA 0 DLEN DATA 0 DPAB DATA 0 DVERS DATA 0 DEV DATA 0,0,0,0 PERIOD TEXT '.' HEXAA BYTE >AA DFLAG DATA 0 D1 CLR @DFLAG MOV *R14+,R5 SZCB @SET,R15 MOV @>8356,R0 MOV R0,R9 AI R9,-8 BLWP @VSBR MOVB R1,R3 SRL R3,8 SETO R4 LI R2,DEV D2 INC R0 INC R4 C R4,R3 JEQ D3 BLWP @VSBR MOVB R1,*R2+ CB R1,@PERIOD JNE D2 D3 MOV R4,R4 JEQ D88 CI R4,7 JGT D88 CLR @>83D0 MOV R4,@>8354 MOV R4,@DLEN INC R4 A R4,@>8356 MOV @>8356,@DPAB D4 LWPI >83E0 CLR R1 LI R12,>0F00 D5 MOV R12,R12 JEQ D55 SBZ 0 D55 AI R12,>0100 CLR @>83D0 CI R12,>2000 JEQ DX MOV R12,@>83D0 SBO 0 LI R2,>4000 CB *R2,@HEXAA JNE D5 A @DEVA,R2 JMP D66 D6 MOV @>83D2,R2 SBO 0 D66 MOV *R2,R2 JEQ D5 MOV R2,@>83D2 INCT R2 MOV *R2+,R9 MOVB @>8355,R5 JEQ D77 CB R5,*R2+ JNE D6 SRL R5,8 LI R6,DEV D7 CB *R6+,*R2+ JNE D6 DEC R5 JNE D7 D77 INC R1 MOV R1,@DVERS MOV R9,@DSENT MOV R12,@DCRU BL *R9 JMP D6 SBZ 0 LWPI REGSD MOV R9,R0 BLWP @VSBR SRL R1,13 JNE D9 RTWP D8 LWPI REGSD D88 CLR R1 D9 SWPB R1 MOVB R1,*R13 SOCB @SET,R15 RTWP DX MOV @DFLAG,@DFLAG JNE D8 SETO @DFLAG LI R12,>0F00 JMP D5 KSCAN DATA KSCAN,KSCAN+4 MOV *R11,R12 LWPI >83E0 BL @>000E LWPI KSCAN MOV R12,*R11 RTWP ******************************************************************************* END