MODULEBYTE CTR, CTR1, DRIVE=[1], MEMCHAR, WRAP=[0], HEX=[0], ERRFLG=[0], FLAG, X, X1, Y, Y1, NUM, MEM, BIT, BIT1, ABORT, JOYSTICK=632, TRIGGER=644, CLOCK=20, LOWCASE=[0], CONSOL=53279, CHCH=764, COUNT=$CB, WYSNC=54282, COL2=$D018, COL1=$D017, COL4=$D01A, NMIEN=$D40E, CHMEM=$CC, BACKMEM=$CD, VCOUNT=$D40B, CHBASS=$D409, MEMTOP=106, CURRENTCHAR=[0], CURRENTSET, POKMSK=16, IRQEN=$D20E, BRK, TIC=[1]CARD VVBLKI=546, VDSLST=512, SCREEN=88, DLIST=560, CCTR, PMAREA CARD ARRAY ANTIC(2) CARD POINTER ENDADDBYTE POINTER BP,BP1BYTE ARRAY PMHPOS(4)=53248, PMWITH(4)=53256, PMCOLR(4)=704, PFCOLR(5)=708, DEFALT=[40 204 228 70 0], MASK=[128 64 32 16 8 4 2 1], CHARSET(10),CHARARRAY=[160 191 149 146 186 170 184 189 185 141 129 133 128 165 163 136 138 175 168 190 173 139 144 174 150171 151 28 142 143 134 135 33 95 94 9088 93 91 115 112 114 7 6 32 14 34 3850 31 30 26 24 29 27 51 53 48 66 2 5415 55 102 117 127 85 82 122 106 120125 121 77 65 69 64 101 99 72 74 111104 126 109 75 80 110 86 107 87 96 7098 71 78 162 63 21 18 58 42 56 61 5713 1 5 0 37 35 8 10 47 40 62 45 11 1646 22 43 23 130 79 118 52 44],FILE=" ",NAME="D1:*.*",NAME2="D1:",ST="D1: "PROC COLPF2=*() [28 164 28 244 228]PROC COLPF1=*() [0 12 0 12 204]PROC DISPLAY1=*() [112 112 240 66 00 144 2 2 2 2 2 2 2 2 2 2 128 2 1282 2 2 2 128 0 6 7 0 2 2 2 2 650 0]PROC DISPLAY2=*() [112 112 240 66 00 144 2 2 2 2 2 2 2 2 2 2 128 2 1282 2 2 2 128 0 4 5 0 4 4 4 4 65 00]PROC BGet=*(BYTE chan BYTE POINTER addr CARD len) [ $84 $A2 ;STY $A2 $A0 $07 ;LDY #BGET $D0 $04 ;BNE *+6 ]PROC BPut=*(BYTE chan BYTE POINTER addr CARD len) [ $84 $A2 ;STY $A2 $A0 $0B ;LDY #BPUT ;JOIN HERE $86 $A1 ;STX $A1 $0A ;ASL A $0A ;ASL A $0A ;ASL A $0A ;ASL A $AA ;TAX $A5 $A1 ;LDA $A1 $9D $344 ;STA ICBADR,X $A5 $A2 ;LDA $A2 $9D $345 ;STA ICADR+1,X $A5 $A3 ;LDA $A3 $9D $348 ;STA ICBLEN,X $A5 $A4 ;LDA $A4 $9D $349 ;STA ICBLEN+1,X $98 ;TYA $9D $342 ;STA ICBCOM,X $20 $E456 ;JSR CIO $10 $03 ;BPL *+5 $20 ERROR ;JSR ERROR $60 ;RTS ]RETURNPROC INTERUPT=*()[ $48 ;PHA $8A ;TXA $48 ;PHA $98 ;TYA $48 ;PHA $A6 COUNT ;LDX COUNT $BD COLPF2 ;LDA COLPF2,X $BC COLPF1 ;LDY COLPF1,X $8D WYSNC ;STA WYSNC $8D COL2 ;STA COL2 $8C COL1 ;STY COL1 $E0 $04 ;CPX #4 $D0 $0A ;BNE 10 $A5 CHMEM ;LDA CHMEM $A4 BACKMEM ;LDY BACKMEM $8D CHBASS ;STA CHBASS $8C COL4 ;STY COL4 $E6 COUNT ;INC COUNT $68 ;PLA $A8 ;TAY $68 ;PLA $AA ;TXA $68 ;PLA $40 ;RTI]PROC VBLANK=*()[ $48 ;PHA $A9 $0 ;LDA #0 $85 COUNT ;STA COUNT $8D $2B6 ;STA INVFLG $A9 $40 ;LDA #64 $8D $2BE ;STA SHFLOK $68 ;PLA $4C $E45F ;JMP $E45F]PROC DIRECTORY()PRINT(")?D")PUT(DRIVE+48)PRINT(":")INPUTS(FILE)IF FILE(0)=0 THEN RETURN FIFOR CTR=1 TO FILE(0) DO ST(3+CTR)=FILE(CTR) ODST(2)=DRIVE+48ST(0)=3+FILE(0)RETURNPROC SETBP()BP=CHARSET(CURRENTSET)*256+(CURRENTCHAR*8)RETURNPROC CLEARSCREEN()POSITION(16,1)PRINT("")FOR CTR=2 TO 10 DO POSITION(15,CTR) PRINT(" ") ODRETURNPROC CLEARP(BYTE F)POSITION(2,11)PRINT(" ")POSITION(2,11)IF F=1 THEN PRINT("FILENAME (SET ")ELSEIF F=2 THEN PRINT("SELECT CHARACTER")ELSEIF F=3 THEN PRINT("ENTER YOUR CHOICE :?")ELSEIF F=4 THEN PRINT("PRESS TRIGGER TO RETURN TO MENU")FIRETURNPROC MYERROR(BYTE ERR)NMIEN=192POKMSK=112IRQEN=112ERRFLG=1CLEARP(0)POKE(752,1)PRINT("ERROR: ")IF ERR=138 THEN PRINT("DEVICE TIMEOUT")ELSEIF ERR=144 THEN PRINT("DEVICE DONE")ELSEIF ERR=162 THEN PRINT("DISK FULL")ELSEIF ERR=165 THEN PRINT("FILENAME")ELSEIF ERR=170 THEN PRINT("FILE NOT FOUND")ELSE PRINTB(ERR) PRINT(" HAS OCCURRED")FICHCH=255DO UNTIL CHCH=33 OR CHCH=28ODCLOSE(1)CLOSE(2)CHCH=255RETURNBYTE FUNC KEYTOASC(BYTE BIT)BYTE CTR FOR CTR=0 TO 127 DO IF BIT=CHARARRAY(CTR) THEN BIT=CTR EXIT FI ODIF BIT>31 AND BIT<96 THEN BIT==-32ELSEIF BIT>=0 AND BIT<32 THEN BIT==+64FIRETURN(BIT)PROC WHICHSET(BYTE NUMBER)DOCLEARP(0) IF NUMBER=0 THEN PRINT("WHICH") ELSEIF NUMBER=1 THEN PRINT("EXCHANGE") ELSEIF NUMBER=2 THEN PRINT("WITH") ELSEIF NUMBER=3 THEN PRINT("COPY") ELSEIF NUMBER=4 THEN PRINT("TO") ELSEIF NUMBER=5 THEN PRINT("RESTORE") ELSEIF NUMBER=6 THEN PRINT("BLANK OUT") ELSEIF NUMBER=14 THEN PRINT("LOAD") ELSEIF NUMBER=18 THEN PRINT("SAVE") FIPRINT(" SET [1-8] :?")CLOSE(1)OPEN(1,"K:",4,0) NUM=GETD(1)CLOSE(1)IF NUM>'0 AND NUM<'9 THEN NUM==-48 EXITELSEIF NUM=' THEN EXITFIODRETURNPROC LOADSET(BYTE LS)WHICHSET(LS+10)IF NUM=' THEN RETURN FICLEARP(1)PRINTB(NUM) DIRECTORY()IF FILE(0)=0 THEN RETURN FICLEARP(0)IF LS=4 THEN PRINT("LOADING -- ")ELSE PRINT("SAVING -- ")FIPRINT(ST)BP=CHARSET(NUM)*256POKMSK=BRKIRQEN=BRKCHMEM=CHARSET(0)OPEN(1,ST,LS,0)IF ERRFLG=1 THEN ERRFLG=0 CHMEM=CHARSET(CURRENTSET) RETURNFIIF LS=4 THEN BGET(1,BP,1024)ELSEIF LS=8 THEN BPUT(1,BP,1024)FICLOSE(1)NMIEN=192POKMSK=112IRQEN=112CHMEM=CHARSET(NUM)+LOWCASE*2CURRENTSET=NUMPOSITION(3,14)PRINTB(CURRENTSET)RETURNPROC GTIA()BYTE TEMPTIC=1-TICPOKE(623,4)POKE(53277,0)POKE(559,2)PMHPOS(1)=0PMHPOS(2)=0PMHPOS(3)=0GRAPHICS(0)POKE(752,1)BRK=POKMSKPOKMSK=112IRQEN=112ENDADD=ANTIC(TIC)+4 ;SET UP DISPLAY LISTENDADD^=SCREENENDADD=ANTIC(TIC)+34ENDADD^=ANTIC(TIC)DLIST=ANTIC(TIC)VDSLST=INTERUPT ;ENABLE INTERUPTNMIEN=192POSITION(0,0)PRINT("CASE: |WRAP: |ASC: 32|INT: 0|KEY: 33")LOWCASE=0POSITION(5,0)PRINT("HI")CHMEM=CHARSET(CURRENTSET)POSITION(13,0)IF WRAP=0 THEN PRINT("OFF")ELSE PRINT("ON ")FIPOSITION(2,1)PRINTE("")FOR CTR=0 TO 7 DO PRINTE("| 0|") ODPRINTE("")BP=SCREEN+640ZERO(BP,200+TIC*40)FOR CTR=0 TO 3 DO BP=SCREEN+486+(CTR*40) BP1=SCREEN+686+(CTR*40)+(TIC*40) FOR CTR1=0 TO 31 DO BP^=CTR1+(CTR*32) BP1^=CTR1+(CTR*32) BP==+1 BP1==+1 OD ODPOSITION(1,12)PRINT("")POSITION(1,13)PRINT("|SET|")POSITION(1,14)PRINT("| |")POSITION(1,15)PRINT("")POSITION(3,14)PRINTB(CURRENTSET)BP=MEMTOP*256ZERO(BP,1024)POKE(559,42)POKE(53277,3)POKE(54279,MEMTOP)POKE(623,1)FOR CTR=0 TO 7 DO FOR CTR1=0 TO 3 DO BP1=MEMTOP*256+793+CTR*4+CTR1 BP=MEMTOP*256+921+CTR*4+CTR1 TEMP=CTR % 1 IF TEMP=CTR THEN BP1^=170+(TIC*34) BP^=85-(TIC*34) ELSE BP1^=85-(TIC*34) BP^=170+(TIC*34) FI OD ODPMCOLR(1)=50PMCOLR(2)=136PMCOLR(3)=134PMHPOS(1)=60PMHPOS(2)=60PMHPOS(3)=60RETURNPROC DATAPRINT(BYTE DATA)BYTE ARRAY HEXA=[48 49 50 51 52 53 5455 56 57 65 66 67 68 69 70]BYTE TEMPIF HEX=0 THEN IF DATA<10 THEN PRINT(" ") ELSEIF DATA<100 THEN PRINT(" ") FI PRINTB(DATA)ELSE PRINT("$") TEMP=DATA RSH 4 PUT(HEXA(TEMP)) TEMP=DATA LSH 4 TEMP== RSH 4 PUT(HEXA(TEMP))FIRETURNPROC CHANGEPLAYER()SETBP()BP1=MEMTOP*256+665FOR CTR=0 TO 7 DO FOR CTR1=0 TO 3 DO BP1^=BP^ BP1==+1 OD POSITION(14,2+CTR) PRINT("~~~") DATAPRINT(BP^) BP==+1ODRETURNPROC GETCURCHAR(BYTE F)Y=CURRENTCHAR/32X=CURRENTCHAR MOD 32X1=XY1=YABORT=0MEM=CURRENTCHARCLEARP(2)IF F='s THEN PRINT(" TO SWAP")ELSEIF F='t THEN PRINT(" TO TRANSFER TO")ELSEIF F='f THEN PRINT(" TO TRANSFER FROM")FIDOCHCH=255 IF JOYSTICK=7 THEN X==+1 IF X=32 THEN X=0:FI ELSEIF JOYSTICK=11 THEN X==-1 IF X=255 THEN X=31:FI ELSEIF JOYSTICK=13 THEN Y==+1 IF Y=4 THEN Y=0:FI ELSEIF JOYSTICK=14 THEN Y==-1 IF Y=255 THEN Y=3:FI FIBP=SCREEN+486+X1+(Y1*40)BP1=SCREEN+686+(TIC*40)+X1+(Y1*40)BP^=MEMBP1^=MEMBP=SCREEN+486+X+(Y*40)BP1=SCREEN+686+(TIC*40)+X+(Y*40)CURRENTCHAR=BP^BP^=CURRENTCHAR+128BP1^=CURRENTCHAR+128MEM=CURRENTCHARX1=XY1=YCLOCK=0 DO UNTIL CLOCK>5 ODIF CHCH#255 THEN ABORT=1:EXIT:FIUNTIL TRIGGER=0 ODDOUNTIL TRIGGER=1ODBP^=MEMBP1^=MEMCLEARP(0)RETURN PROC WRITEDATA()POSITION(29,0)DATAPRINT(CURRENTCHAR)BIT=CURRENTCHARIF BIT>=0 AND BIT<64 THEN BIT==+32ELSEIF BIT>63 AND BIT<96 THEN BIT==-64FI POSITION(21,0)DATAPRINT(BIT)POSITION(37,0)DATAPRINT(CHARARRAY(BIT))RETURNPROC MENU(BYTE NUM)BYTE X,X1,Y,Y1CLEARSCREEN()BP=COLPF2+1IF NUM=1 THEN BP^=164 POSITION(16,1) PRINT("Πՠ") POSITION(16,3) PRINT(" EDITOR ANIMATE") POSITION(16,4) PRINT(" LOAD SET TEST LINE") POSITION(16,5) PRINT(" SAVE SET RESTORE") POSITION(16,6) PRINT(" COPY SET GTIA MODE") POSITION(16,7) PRINT(" EXCHANGE COLOURS *") POSITION(16,8) PRINT(" MOVE-CHS BLANK SET") POSITION(16,9) PRINT(" DISK HEX/DEC *")ELSEIF NUM=5 THEN BP^=212 POSITION(16,1) PRINT("ˠ٠") POSITION(16,2) PRINT("ԠŠӠ") PUT(DRIVE+176) PRINT("") POSITION(18,4) PRINT("Ġ For Directory") POSITION(18,5) PRINT(" To change Drive") POSITION(18,6) PRINT(" To quit") POSITION(18,7) PRINT("Ӡ Format Single") POSITION(18,8) PRINT("Ơ Format Double")ELSEIF NUM=2 THEN BP^=6 POSITION(16,1) PRINT("Ҡՠ") POSITION(16,3) PRINT("ź ú ׺") POSITION(16,4) PRINT("  ") POSITION(16,5) PRINT(" غ Ժ") POSITION(16,6) PRINT("Ӻ պ ƺ") POSITION(16,8) PRINT("Һ ͺ ") POSITION(16,9) PRINT("ú ɺ")ELSEIF NUM=3 THEN BP^=84 POSITION(16,1) PRINT("ŠӠ") POSITION(16,3) PRINT("1 Choose characterset") POSITION(16,4) PRINT(" to move to.") POSITION(16,5) PRINT("2 Choose characters to") POSITION(16,6) PRINT(" move. (MAX 32)") POSITION(16,7) PRINT("3 Space bar for step 4") POSITION(16,8) PRINT("4 Choose position for") POSITION(16,9) PRINT(" character in new set")ELSEIF NUM=4 THEN BP^=116 CLEARP(4) POSITION(16,1) PRINT("ŠӠ") POSITION(16,3) PRINT(" ŠҠ") FOR CTR=0 TO 4 DO POSITION(18,4+CTR) PRINTC(708+CTR) PUT(44) IF CTR=4 THEN PRINTB(BACKMEM) ELSE PRINTB(PFCOLR(CTR)) FI POSITION(26,4+CTR) PRINT("SE.") PRINTB(CTR) PUT(44) IF CTR=4 THEN BIT=BACKMEM ELSE BIT=PFCOLR(CTR) FI BIT1=BIT RSH 4 BIT== LSH 4 BIT== RSH 4 PRINTB(BIT1) PUT(44) PRINTB(BIT) OD POSITION(18,9) PRINT("Default Colours") X=25:Y=4:Y1=4:BIT=0 POSITION(X,Y) PUT(2*40 CHCH=255 DO IF JOYSTICK=14 OR JOYSTICK=13 THEN IF JOYSTICK=14 THEN Y==-1 IF Y<4 THEN Y=9 FI ELSE Y==+1 IF Y>9 THEN Y=4 FI FI POSITION(X,Y1) PUT(32) POSITION(X,Y) PUT(20) Y1=Y BIT=Y-4 FI IF BIT<5 AND (JOYSTICK=11 OR JOYSTICK=7) THEN IF JOYSTICK=11 THEN IF BIT=4 THEN BACKMEM==-2 ELSE PFCOLR(BIT)==-2 FI ELSEIF JOYSTICK=7 THEN IF BIT=4 THEN BACKMEM==+2 ELSE PFCOLR(BIT)==+2 FI FI POSITION(36,4+BIT) PRINT("~~~~~~~") PRINTB(BIT) PUT(44) IF BIT=4 THEN X1=BACKMEM ELSE X1=PFCOLR(BIT) FI BIT1=X1 RSH 4 X1== LSH 4 X1== RSH 4 PRINTB(BIT1) PUT(44) PRINTB(X1) POSITION(25,4+BIT) PRINT("~~~") IF BIT=4 THEN PR