/* Program to disable two Acorn Atom ROMS in quasi C code * * */ #include #include typedef signed char SBYTE; typedef unsigned char UBYTE; typedef unsigned short UWORD; UBYTE memory[65536]; UBYTE status[65536]; #define ST_LOADED 0 #define ST_TOGO 1 #define ST_INST 2 #define ST_JMPT 3 #define ST_JSRT 4 bool get_status(UWORD a, int kind) { return (status[a] & (1 << kind)) != 0; } void set_status(UWORD a, int kind) { status[a] |= (1 << kind); } #define GetByte(addr) memory[addr] /* Atom_GetByte(addr) */ #define GETWORD word = (GetByte(addr+1) << 8) | GetByte(addr); addr+=2 #define GETBYTE byte = GetByte(addr++) void disassemble(UWORD &addr, bool &go, FILE *f) { UBYTE instr = GetByte(addr++); UBYTE byte; UWORD word; switch (instr) { /* ========================= Absolute Addressing Modes ========================= */ case 0x8c : /* STY */ GETWORD; if (f != 0) fprintf(f, "mem[%04X] = Y;", word); break; case 0x8e : /* STX */ GETWORD; if (f != 0) fprintf(f, "mem[%04X] = X;", word); break; case 0x8d : /* STA */ GETWORD; if (f != 0) fprintf(f, "mem[%04X] = A;", word); break; case 0x6d : /* ADC */ GETWORD; if (f != 0) fprintf(f, "A += mem[%04X] + C;", word); break; case 0x2d : /* AND */ GETWORD; if (f != 0) fprintf(f, "A &= mem[%04X];", word); break; case 0x0e : /* ASL */ GETWORD; if (f != 0) fprintf(f, "ASL mem[%04X];", word); break; case 0x2c : /* BIT */ GETWORD; if (f != 0) fprintf(f, "cmp = 0 <> mem[%04X];", word); break; case 0xcd : /* CMP */ GETWORD; if (f != 0) fprintf(f, "cmp = A <> mem[%04X];", word); break; case 0xec : /* CPX */ GETWORD; if (f != 0) fprintf(f, "cmp = X <> mem[%04X];", word); break; case 0xcc : /* CPY */ GETWORD; if (f != 0) fprintf(f, "cmp = Y <> mem[%04X];", word); break; case 0xce : /* DEC */ GETWORD; if (f != 0) fprintf(f, "mem[%04X]--;", word); break; case 0x4d : /* EOR */ GETWORD; if (f != 0) fprintf(f, "A ^= mem[%04X];", word); break; case 0xee : /* INC */ GETWORD; if (f != 0) fprintf(f, "mem[%04X]++;", word); break; case 0xad : /* LDA */ GETWORD; if (f != 0) fprintf(f, "A = mem[%04X];", word); break; case 0xae : /* LDX */ GETWORD; if (f != 0) fprintf(f, "X = mem[%04X];", word); break; case 0xac : /* LDY */ GETWORD; if (f != 0) fprintf(f, "Y = mem[%04X];", word); break; case 0x4e : /* LSR */ GETWORD; if (f != 0) fprintf(f, "LSR mem[%04X];", word); break; case 0x0d : /* ORA */ GETWORD; if (f != 0) fprintf(f, "A |= mem[%04X];", word); break; case 0x2e : /* ROL */ GETWORD; if (f != 0) fprintf(f, "ROL mem[%04X];", word); break; case 0x6e : /* ROR */ GETWORD; if (f != 0) fprintf(f, "ROR mem[%04X];", word); break; case 0xed : /* SBC */ GETWORD; if (f != 0) fprintf(f, "A -= mem[%04X] - C;", word); break; case 0x4c : /* JMP */ GETWORD; if (f != 0) fprintf(f, "JMP %04X;", word); if (get_status(word, ST_LOADED)) set_status(word, ST_JMPT); else if (word == 0xFFED) { if (f != 0) fprintf(f, "/* OSCRLF write */"); } else if (word == 0x2800) { if (f != 0) fprintf(f, "/* 'user area' */"); } else if (word == 0xC2F2) { if (f != 0) fprintf(f, "/* in BASIC ROM */"); } else if (word == 0xF7FA) { if (f != 0) fprintf(f, "/* JSR to: Print a Byte in Hexadecimal followed by a Space subroutine */"); } else if (word == 0xF95B) { if (f != 0) fprintf(f, "/* inside Execute the Command '*LOAD' subroutine */"); } else if (word == 0xFABE) { if (f != 0) fprintf(f, "/* Execute the Command '*SAVE' (it seems) */"); } else if (word == 0xFF3F) { if (f != 0) fprintf(f, "/* RESET Routine */"); } else if (word == 0xFA7D) { if (f != 0) fprintf(f, "/* first label in: COS Post Test subroutine */"); } else { if (f != 0) fprintf(f,"/* external */"); } go = false; break; case 0x20 : /* JSR */ GETWORD; if (f != 0) fprintf(f, "JSR %04X;", word); if (word == 0xC231) { if (f != 0) printf("/* Search for ',', executing BRK if failure */"); } else if (word == 0xC589) { if (f != 0) printf("/* Print line number in decimal in field @ */"); } else if (word == 0xC8BC) { if (f != 0) printf("/* Evaluate X coordinate onto the w/s stack */"); } else if (word == 0xF7D1) { if (f != 0) fprintf(f, "/* print string, data: '"); for (; memory[addr] != 0xEA; addr++) if (f != 0) fprintf(f, "%c", memory[addr]); if (f != 0) fprintf(f, "'*/"); addr++; } else if (word == 0xF7F1) { if (f != 0) fprintf(f, "/* Print a 2 Byte Vector in Hexadecimal followed by a Space subroutine */"); } else if (word == 0xF7FA) { if (f != 0) fprintf(f, "/* JSR Print a Byte in Hexadecimal subroutine */"); } else if (word == 0xF844) { if (f != 0) fprintf(f, "/* just before F84F?? Transfer Tape File Control Block and Test Name subroutine */"); } else if (word == 0xF84F) { if (f != 0) fprintf(f, "/* Transfer Tape File Control Block and Test Name subroutine */"); } else if (word == 0xF87E) { if (f != 0) fprintf(f, "/* Convert ASCII Hexadecimal Digit to Binary subroutine */"); } else if (word == 0xF95B) { if (f != 0) fprintf(f, "/* near: \"Execute the Command '*LOAD' subroutine\" */"); } else if (word == 0xFFE3) { if (f != 0) fprintf(f, "/* OSRDCH */"); } else if (word == 0xF7FD) { if (f != 0) fprintf(f, "/* Print a Space */"); } else if (word == 0xF802) { if (f != 0) fprintf(f, "/* Prints the contents of the accumulator in hex */"); } else if (word == 0xF80B) { if (f != 0) fprintf(f, "/* Print nibble in hex via OSWRCH */"); } else if (word == 0xF876) { if (f != 0) fprintf(f, "/* Get Next Non-Space Character from #100 Buffer subroutine */"); } else if (word == 0xF893) { if (f != 0) fprintf(f, "/* Read 4 Hexadecimal Characters from #100 buffer subroutine */"); } else if (word == 0xFA65) { if (f != 0) fprintf(f, "/* Read 4 Hex Characters from #100 buffer with Invalid Test subroutine */"); } else if (word == 0xFA76) { if (f != 0) fprintf(f, "/* COS Post Test subroutine */"); } else if (word == 0xFFED) { if (f != 0) fprintf(f, "/* OSCRLF write */"); } else if (word == 0xFFF4) { if (f != 0) fprintf(f, "/* OSWRCH */"); } else if (get_status(word, ST_LOADED)) set_status(word, ST_JSRT); else { if (f != 0) fprintf(f, " /* external */"); } break; /* ====================== 0-Page Addressing Mode ====================== */ case 0x86 : /* STX */ GETBYTE; if (f != 0) fprintf(f, "mem[%02X] = X;", byte); break; case 0x84 : /* STY */ GETBYTE; if (f != 0) fprintf(f, "mem[%02X] = Y;", byte); break; case 0x85 : /* STA */ GETBYTE; if (f != 0) fprintf(f, "mem[%02X] = A;", byte); break; case 0x65 : /* ADC */ GETBYTE; if (f != 0) fprintf(f, "A += mem[%02X] + C;", byte); break; case 0x25 : /* AND */ GETBYTE; if (f != 0) fprintf(f, "A &= mem[%02X];", byte); break; case 0x06 : /* ASL */ GETBYTE; if (f != 0) fprintf(f, "ASL mem[%02X];", byte); break; case 0x24 : /* BIT */ GETBYTE; if (f != 0) fprintf(f, "cmp = 0 <> mem[%02X];", byte); break; case 0xc5 : /* CMP */ GETBYTE; if (f != 0) fprintf(f, "cmp = A <> mem[%02X];", byte); break; case 0xe4 : /* CPX */ GETBYTE; if (f != 0) fprintf(f, "cmp = X <> mem[%02X];", byte); break; case 0xc4 : /* CPY */ GETBYTE; if (f != 0) fprintf(f, "cmp = Y <> mem[%02X];", byte); break; case 0xc6 : /* DEC */ GETBYTE; if (f != 0) fprintf(f, "mem[%02X]--;", byte); break; case 0x45 : /* EOR */ GETBYTE; if (f != 0) fprintf(f, "A ^= mem[%02X];", byte); break; case 0xe6 : /* INC */ GETBYTE; if (f != 0) fprintf(f, "mem[%02X]++;", byte); break; case 0xa5 : /* LDA */ GETBYTE; if (f != 0) fprintf(f, "A = mem[%02X];", byte); break; case 0xa6 : /* LDX */ GETBYTE; if (f != 0) fprintf(f, "X = mem[%02X];", byte); break; case 0xa4 : /* LDY */ GETBYTE; if (f != 0) fprintf(f, "Y = mem[%02X];", byte); break; case 0x46 : /* LSR */ GETBYTE; if (f != 0) fprintf(f, "LSR mem[%02X];", byte); break; case 0x05 : /* ORA */ GETBYTE; if (f != 0) fprintf(f, "A |= mem[%02X];", byte); break; case 0x26 : /* ROL */ GETBYTE; if (f != 0) fprintf(f, "ROL mem[%02X];", byte); break; case 0x66 : /* ROR */ GETBYTE; if (f != 0) fprintf(f, "ROR mem[%02X];", byte); break; case 0xe5 : /* SBC */ GETBYTE; if (f != 0) fprintf(f, "A -= mem[%02X] - C;", byte); break; /* ======================== Relative Addressing Mode ======================== */ case 0x90 : /* BCC */ case 0xb0 : /* BCS */ case 0xf0 : /* BEQ */ case 0x30 : /* BMI */ case 0xd0 : /* BNE */ case 0x10 : /* BPL */ case 0x50 : /* BVC */ case 0x70 : /* BVS */ { byte = GetByte(addr++); UWORD a = (signed short)addr+(SBYTE)byte; switch( instr ) { case 0x90 : /* BCC */ if (f != 0) fprintf(f, "if(!C) JMP %04X;", a); break; case 0xb0 : /* BCS */ if (f != 0) fprintf(f, "if(C) JMP %04X;", a); break; case 0xf0 : /* BEQ */ if (f != 0) fprintf(f, "if(cmp == 0) JMP %04X;", a); break; case 0x30 : /* BMI */ if (f != 0) fprintf(f, "if(cmp < 0) JMP %04X;", a); break; case 0xd0 : /* BNE */ if (f != 0) fprintf(f, "if(cmp != 0) JMP %04X;", a); break; case 0x10 : /* BPL */ if (f != 0) fprintf(f, "if(cmp > 0) JMP %04X;", a); break; case 0x50 : /* BVC */ if (f != 0) fprintf(f, "if(!V) JMP %04X;", a); break; case 0x70 : /* BVS */ if (f != 0) fprintf(f, "if(V) JMP %04X;", a); break; } if (get_status((signed long)addr+(SBYTE)byte, ST_LOADED)) set_status((signed long)addr+(SBYTE)byte, ST_JMPT); break; } /* ========================= Immediate Addressing Mode ========================= */ case 0xa2 : /* LDX */ GETBYTE; if (f != 0) fprintf(f, "X = %02X;", byte); break; case 0x69 : /* ADC */ GETBYTE; if (f != 0) fprintf(f, "X += %02X + C;", byte); break; case 0x29 : /* AND */ GETBYTE; if (f != 0) fprintf(f, "X &= %02X;", byte); break; case 0xc9 : /* CMP */ GETBYTE; if (f != 0) fprintf(f, "cmp = A <> %02X;", byte); break; case 0xe0 : /* CPX */ GETBYTE; if (f != 0) fprintf(f, "cmp = X <> %02X;", byte); break; case 0xc0 : /* CPY */ GETBYTE; if (f != 0) fprintf(f, "cmp = X <> %02X;", byte); break; case 0x49 : /* EOR */ GETBYTE; if (f != 0) fprintf(f, "X ^= %02X;", byte); break; case 0xa9 : /* LDA */ GETBYTE; if (f != 0) fprintf(f, "A = %02X;", byte); break; case 0xa0 : /* LDY */ GETBYTE; if (f != 0) fprintf(f, "Y = %02X;", byte); break; case 0x09 : /* ORA */ GETBYTE; if (f != 0) fprintf(f, "X |= %02X;", byte); break; case 0xe9 : /* SBC */ GETBYTE; if (f != 0) fprintf(f, "X -= %02X - C;", byte); break; case 0xff : /* ESC */ GETBYTE; if (f != 0) fprintf(f, "ESC %02X;", byte); go = false; break; /* ===================== ABS,X Addressing Mode ===================== */ case 0x9d : /* STA */ GETWORD; if (f != 0) fprintf(f, "mem[%04X + X] = A;", word); break; case 0x7d : /* ADC */ GETWORD; if (f != 0) fprintf(f, "A += mem[%04X + X] + C;", word); break; case 0x3d : /* AND */ GETWORD; if (f != 0) fprintf(f, "A &= mem[%04X + X];", word); break; case 0x1e : /* ASL */ GETWORD; if (f != 0) fprintf(f, "ASL mem[%04X + X];", word); break; case 0xdd : /* CMP */ GETWORD; if (f != 0) fprintf(f, "cmp = A <> mem[%04X + X];", word); break; case 0xde : /* DEC */ GETWORD; if (f != 0) fprintf(f, "mem[%04X + X]--;", word); break; case 0x5d : /* EOR */ GETWORD; if (f != 0) fprintf(f, "A ^= mem[%04X + X];", word); break; case 0xfe : /* INC */ GETWORD; if (f != 0) fprintf(f, "mem[%04X + X]++;", word); break; case 0xbd : /* LDA */ GETWORD; if (f != 0) fprintf(f, "A = mem[%04X + X];", word); break; case 0xbc : /* LDY */ GETWORD; if (f != 0) fprintf(f, "X = mem[%04X + X];", word); break; case 0x5e : /* LSR */ GETWORD; if (f != 0) fprintf(f, "LSR mem[%04X + X];", word); break; case 0x1d : /* ORA */ GETWORD; if (f != 0) fprintf(f, "A |= mem[%04X + X];", word); break; case 0x3e : /* ROL */ GETWORD; if (f != 0) fprintf(f, "ROL mem[%04X + X];", word); break; case 0x7e : /* ROR */ GETWORD; if (f != 0) fprintf(f, "ROR mem[%04X + X];", word); break; case 0xfd : /* SBC */ GETWORD; if (f != 0) fprintf(f, "A -= mem[%04X + X] - C;", word); break; /* ===================== ABS,Y Addressing Mode ===================== */ case 0x99 : /* STA */ GETWORD; if (f != 0) fprintf(f, "mem[%04X + Y] = A;", word); break; case 0x79 : /* ADC */ GETWORD; if (f != 0) fprintf(f, "A += mem[%04X + Y] + C;", word); break; case 0x39 : /* AND */ GETWORD; if (f != 0) fprintf(f, "A &= mem[%04X + Y];", word); break; case 0xd9 : /* CMP */ GETWORD; if (f != 0) fprintf(f, "cmp = A <> mem[%04X + Y];", word); break; case 0x59 : /* EOR */ GETWORD; if (f != 0) fprintf(f, "A ^= mem[%04X + Y];", word); break; case 0xb9 : /* LDA */ GETWORD; if (f != 0) fprintf(f, "A = mem[%04X + Y];", word); break; case 0xbe : /* LDX */ GETWORD; if (f != 0) fprintf(f, "X = mem[%04X + Y];", word); break; case 0x19 : /* ORA */ GETWORD; if (f != 0) fprintf(f, "A |= mem[%04X + Y];", word); break; case 0xf9 : /* SBC */ GETWORD; if (f != 0) fprintf(f, "A -= mem[%04X + Y] - C;", word); break; break; /* ======================= (IND,X) Addressing Mode ======================= */ case 0x61 : /* ADC */ GETBYTE; if (f != 0) fprintf(f, "A += memory[memory[%02X+X]] + C;", byte); break; case 0x21 : /* AND */ GETBYTE; if (f != 0) fprintf(f, "A &= memory[memory[%02X+X]];", byte); break; case 0xc1 : /* CMP */ GETBYTE; if (f != 0) fprintf(f, "cmp = A <> memory[memory[%02X+X]];", byte); break; case 0x41 : /* EOR */ GETBYTE; if (f != 0) fprintf(f, "A ^= memory[memory[%02X+X]];", byte); break; case 0xa1 : /* LDA */ GETBYTE; if (f != 0) fprintf(f, "A = memory[memory[%02X+X]];", byte); break; case 0x01 : /* ORA */ GETBYTE; if (f != 0) fprintf(f, "A |= memory[memory[%02X+X]];", byte); break; case 0xe1 : /* SBC */ GETBYTE; if (f != 0) fprintf(f, "A -= memory[memory[%02X+X]] - C;", byte); break; case 0x81 : /* STA */ GETBYTE; if (f != 0) fprintf(f, "memory[memory[%02X+X]] = A;", byte); break; /* ======================= (IND),Y Addressing Mode ======================= */ case 0x71 : /* ADC */ GETBYTE; if (f != 0) fprintf(f, "A += memory[memory[%02X]+Y] + C;", byte); break; case 0x31 : /* AND */ GETBYTE; if (f != 0) fprintf(f, "A &= memory[memory[%02X]+Y];", byte); break; case 0xd1 : /* CMP */ GETBYTE; if (f != 0) fprintf(f, "cmp = A <> memory[memory[%02X]+Y];", byte); break; case 0x51 : /* EOR */ GETBYTE; if (f != 0) fprintf(f, "A ^= memory[memory[%02X]+Y];", byte); break; case 0xb1 : /* LDA */ GETBYTE; if (f != 0) fprintf(f, "A = memory[memory[%02X]+Y];", byte); break; case 0x11 : /* ORA */ GETBYTE; if (f != 0) fprintf(f, "A |= memory[memory[%02X]+Y];", byte); break; case 0xf1 : /* SBC */ GETBYTE; if (f != 0) fprintf(f, "A -= memory[memory[%02X]+Y] - C;", byte); break; case 0x91 : /* STA */ GETBYTE; if (f != 0) fprintf(f, "memory[memory[%02X]+Y] = A;", byte); break; /* ======================== 0-Page,X Addressing Mode ======================== */ case 0x94 : /* STY */ GETBYTE; if (f != 0) fprintf(f, "mem[(%02X + X)&0xFF] = Y;", byte); break; case 0x75 : /* ADC */ GETBYTE; if (f != 0) fprintf(f, "A += mem[(%02X + X)&0xFF] + C;", byte); break; case 0x35 : /* AND */ GETBYTE; if (f != 0) fprintf(f, "A &= mem[(%02X + X)&0xFF];", byte); break; case 0x16 : /* ASL */ GETBYTE; if (f != 0) fprintf(f, "ASL mem[(%02X + X)&0xFF];", byte); break; case 0xd5 : /* CMP */ GETBYTE; if (f != 0) fprintf(f, "cmp = A <> mem[(%02X + X)&0xFF];", byte); break; case 0xd6 : /* DEC */ GETBYTE; if (f != 0) fprintf(f, "mem[(%02X + X)&0xFF]--;", byte); break; case 0x55 : /* EOR */ GETBYTE; if (f != 0) fprintf(f, "A ^= mem[(%02X + X)&0xFF];", byte); break; case 0xf6 : /* INC */ GETBYTE; if (f != 0) fprintf(f, "mem[(%02X + X)&0xFF]++;", byte); break; case 0xb5 : /* LDA */ GETBYTE; if (f != 0) fprintf(f, "A = mem[(%02X + X)&0xFF];", byte); break; case 0xb4 : /* LDY */ GETBYTE; if (f != 0) fprintf(f, "Y = mem[(%02X + X)&0xFF];", byte); break; case 0x56 : /* LSR */ GETBYTE; if (f != 0) fprintf(f, "LSR mem[(%02X + X)&0xFF];", byte); break; case 0x15 : /* ORA */ GETBYTE; if (f != 0) fprintf(f, "A |= mem[(%02X + X)&0xFF];", byte); break; case 0x36 : /* ROL */ GETBYTE; if (f != 0) fprintf(f, "ROL mem[(%02X + X)&0xFF];", byte); break; case 0x76 : /* ROR */ GETBYTE; if (f != 0) fprintf(f, "ROR mem[(%02X + X)&0xFF];", byte); break; case 0xf5 : /* SBC */ GETBYTE; if (f != 0) fprintf(f, "A -= mem[(%02X + X)&0xFF] - C;", byte); break; case 0x95 : /* STA */ GETBYTE; if (f != 0) fprintf(f, "mem[(%02X + X)&0xFF] = A;", byte); break; /* ======================== 0-Page,Y Addressing Mode ======================== */ case 0xb6 : /* LDX */ GETBYTE; if (f != 0) fprintf(f, "X = mem[(%02X + Y)&0xFF];", byte); break; case 0x96 : /* STX */ GETBYTE; if (f != 0) fprintf(f, "mem[(%02X + Y)&0xFF] = X;", byte); break; /* ======================== Indirect Addressing Mode ======================== */ case 0x6c : /* printf ("JMP INDIRECT at %x\n",instr_addr); */ word = (GetByte(addr+1) << 8) | GetByte(addr); if (f != 0) { fprintf(f, "JMP mem[%04X]",word); if (word == 0x0052) fprintf(f, " /* User workspace */"); if (word == 0x009E) fprintf(f, " /* DOS workspace */"); if (word == 0x020C) fprintf(f, " /* LODVEC Load file */"); if (word == 0x020E) fprintf(f, " /* SAVVEC Save file */"); if (word == 0x023E) fprintf(f, " /* Econet workspace */"); } go = false; addr += 2; break; case 0x4a : if (f != 0) fprintf(f, "LSR A;"); break; case 0x2a : if (f != 0) fprintf(f, "ROL A;"); break; case 0x6a : if (f != 0) fprintf(f, "ROR A;"); break; case 0x0a : if (f != 0) fprintf(f, "ASL A;"); break; case 0x00 : if (f != 0) fprintf(f, "BRK;"); go = false; break; case 0x18 : if (f != 0) fprintf(f, "CLC;"); break; case 0xd8 : if (f != 0) fprintf(f, "CLD;"); break; case 0x58 : if (f != 0) fprintf(f, "CLI;"); break; case 0xb8 : if (f != 0) fprintf(f, "CLV;"); break; case 0xca : if (f != 0) fprintf(f, "X--;"); break; case 0x88 : if (f != 0) fprintf(f, "Y--;"); break; case 0xe8 : if (f != 0) fprintf(f, "X++;"); break; case 0xc8 : if (f != 0) fprintf(f, "Y++"); break; case 0xea : if (f != 0) fprintf(f, "NOP;"); break; case 0x48 : if (f != 0) fprintf(f, "PHA;"); break; case 0x08 : if (f != 0) fprintf(f, "PHP;"); break; case 0x68 : if (f != 0) fprintf(f, "PLA;"); break; case 0x28 : if (f != 0) fprintf(f, "PLP;"); break; case 0x40 : if (f != 0) fprintf(f, "RTI;"); go = false; break; case 0x60 : if (f != 0) fprintf(f, "RTS;"); go = false; break; case 0x38 : if (f != 0) fprintf(f, "SEC;"); break; case 0xf8 : if (f != 0) fprintf(f, "SED;"); break; case 0x78 : if (f != 0) fprintf(f, "SEI;"); break; case 0xaa : if (f != 0) fprintf(f, "X = A;"); break; case 0xa8 : if (f != 0) fprintf(f, "Y = A;"); break; case 0xba : if (f != 0) fprintf(f, "X = S;"); break; case 0x8a : if (f != 0) fprintf(f, "A = X;"); break; case 0x9a : if (f != 0) fprintf(f, "S = X;"); break; case 0x98 : if (f != 0) fprintf(f, "A = Y;"); break; default : go = false; if (f != 0) fprintf(f, "*** ILLEGAL INSTRUCTION (%x) ***",instr); break; } if (f != 0) fprintf(f, "\n"); } bool commandchar(UBYTE c) { return ('A' <= c && c <= 'Z') || c == '*'; } class Entry { public: Entry(const char* b, UWORD a, Entry* n) : addr(a), next(n) { for (int i = 0; i < 20; i++) name[i] = b[i]; } char name[20]; UWORD addr; Entry* next; }; Entry* entries = 0; const char* findEntry(UWORD a) { for (Entry* ent = entries; ent != 0; ent = ent->next) if (ent->addr == a) return ent->name; return 0; } void loadFile(const char* fn) { entries = 0; for (long i = 0; i < 65536L; i++) { memory[i] = 0; status[i] = 0; } FILE *f = fopen(fn, "rb"); bool at_hex = true; for (int i = 0xA000; ; i++) { unsigned char ch = fgetc(f); if (feof(f)) break; memory[i] = ch; set_status(i, ST_LOADED); } fclose(f); } void disassembleMemory() { for (bool go = true; go;) { go = false; for (UWORD a = 0xA000; a < 0xB000; a++) { if ( !get_status(a, ST_INST) && ( get_status(a, ST_TOGO) || get_status(a, ST_JMPT) || get_status(a, ST_JSRT))) { go = true; UWORD addr = a; for (bool go_dis = true; go_dis;) { set_status(addr, ST_INST); disassemble(addr, go_dis, 0); } } } } /* for (UWORD a = 0xA000; a < 0xB000; a++) { if ((get_status(a, ST_JSRT) || get_status(a, ST_TOGO)) && get_status(a, ST_TOGO)) printf("%04X remove ST_TOGO\n", a); } */ UWORD next_a = 0; for (UWORD a = 0xA000; a < 0xB000; a++) { if (get_status(a, ST_INST)) { const char* entname = findEntry(a); if (entname != 0) printf("\n\n/****** %s *******/\n", entname); else { if (get_status(a, ST_JSRT) || get_status(a, ST_TOGO)) printf("\n\n"); if (get_status(a, ST_TOGO)) printf("/******************/\n"); } if (get_status(a, ST_JSRT) || get_status(a, ST_JMPT) || get_status(a, ST_TOGO)) printf("%04X ", a); else printf(" "); if (a < next_a) printf("/* ! */"); bool go_dis = true; UWORD addr = a; disassemble(addr, go_dis, stdout); if (next_a < addr) next_a = addr; } else if (a >= next_a) { printf("%04X ", a); if (' ' <= memory[a] && memory[a] <= 127) printf("// '%c'\n", memory[a]); else printf("// 0x%02X\n", memory[a]); } } printf("\n\n"); } int main(int argc, char *argv[]) { // http://mdfs.net/Docs/Comp/Acorn/Atom/MemoryMap // http://ladybug.xs4all.nl/arlet/fpga/6502/kernel.dis // http://www.e-tradition.net/bytes/6502/disassembler.html printf("Process sdrom2.2.rom\n\n"); loadFile("sdrom2.2.rom"); for (UWORD a = 0xA0A1; commandchar(memory[a]);) { char buf[200]; char *s = buf; while (commandchar(memory[a])) *s++ = memory[a++]; *s = '\0'; UWORD start = (memory[a] << 8) | memory[a+1]; printf(" %s: %04X\n", buf, start); entries = new Entry(buf, start, entries); set_status(start, ST_TOGO); a += 2; } // Extra starting points for disassembling: set_status(0xA002, ST_TOGO); set_status(0xA305, ST_TOGO); set_status(0xA3E8, ST_TOGO); set_status(0xA600, ST_TOGO); set_status(0xAE26, ST_TOGO); set_status(0xAEED, ST_TOGO); set_status(0xAEFA, ST_TOGO); set_status(0xA7B7, ST_TOGO); disassembleMemory(); printf("Process atommc2-1.6.rom\n\n"); loadFile("atommc2-1.6.rom"); // Extra starting points for disassembling: set_status(0xA000, ST_TOGO); for (UWORD a = 0xA848; commandchar(memory[a]);) { char buf[200]; char *s = buf; while (commandchar(memory[a])) *s++ = memory[a++]; *s = '\0'; UWORD start = (memory[a] << 8) | memory[a+1]; printf(" %s: %04X\n", buf, start); entries = new Entry(buf, start, entries); set_status(start, ST_TOGO); a += 2; } set_status(0xA0B2, ST_TOGO); set_status(0xA0DC, ST_TOGO); set_status(0xA28E, ST_TOGO); set_status(0xA4CD, ST_TOGO); set_status(0xA509, ST_TOGO); set_status(0xA51F, ST_TOGO); set_status(0xA56E, ST_TOGO); set_status(0xA7BD, ST_TOGO); set_status(0xA7E1, ST_TOGO); set_status(0xA811, ST_TOGO); set_status(0xA81B, ST_TOGO); set_status(0xA820, ST_TOGO); //set_status(0x, ST_TOGO); //set_status(0x, ST_TOGO); //set_status(0x, ST_TOGO); //set_status(0x, ST_TOGO); disassembleMemory(); return 0; } /// Output of the program: #if 0 Process sdrom2.2.rom XCAT: A169 DELETE: A296 DIR: A2B9 DRIVE: A2BF INFO: A2D4 INFALL: A2DA LOAD: A2F1 LOCK: A39C MON: A3A0 NOMON: A3AA RUN: A3AF SAVE: A3BB SET: A559 TITLE: A567 UNLOCK: A5D1 USE: A5F0 COS: A80F DOS: A82A DIN: A830 DCAT: A893 DDISKS: A93E DPROT: A985 DUNPROT: A99D DFREE: A9B5 DKILL: AA23 DRESTORE: AA61 DNEW: AA76 DFORM: AAEE DONBOOT: AB64 DHELP: AB81 A000 // '@' A001 // 0xBF /******************/ A002 X = FF; A004 Y = mem[5E]; Y--; A007 X++; Y++ A009 A = mem[A099 + X]; if(cmp < 0) JMP A022; cmp = A <> memory[memory[05]+Y]; if(cmp == 0) JMP A007; A012 X++; A = mem[A098 + X]; if(cmp > 0) JMP A012; A = memory[memory[05]+Y]; cmp = A <> 2E; if(cmp != 0) JMP A004; Y++ X--; if(C) JMP A009; A022 mem[03] = Y; mem[53] = A; A = mem[A09A + X]; mem[52] = A; X = 00; mem[04] = X; JSR A039; X = 00; mem[04] = X; JMP C558;/* external */ A039 JMP mem[0052] /* User workspace */ A03C // 0xA2 A03D // 0x08 A03E // 0xD8 A03F // 0xA0 A040 // 0x00 A041 // ' ' A042 // 'v' A043 // 0xF8 A044 // 0x88 A045 // 0xC8 A046 // 0xE8 A047 // 0xBD A048 // 0x99 A049 // 0xA0 A04A // '0' A04B // 0x18 A04C // 0xD9 A04D // 0x00 A04E // 0x01 A04F // 0xF0 A050 // 0xF4 A051 // 0xCA A052 // 0xE8 A053 // 0xBD A054 // 0x99 A055 // 0xA0 A056 // 0x10 A057 // 0xFA A058 // 0xE8 A059 // 0xB9 A05A // 0x00 A05B // 0x01 A05C // 0xC9 A05D // '.' A05E // 0xD0 A05F // 0xDF A060 // 0xC8 A061 // 0xCA A062 // 0xB0 A063 // 0xE3 A064 // 0x84 A065 // 0x9A A066 // 0xA4 A067 // 0x03 A068 // 0x84 A069 // 0xD5 A06A // 0xA4 A06B // 0x05 A06C // 0x84 A06D // 0xD6 A06E // 0xA4 A06F // 0x06 A070 // 0x84 A071 // 0xD7 A072 // 0xA0 A073 // 0x00 A074 // 0x84 A075 // 0x05 A076 // 0xA0 A077 // 0x01 A078 // 0x84 A079 // 0x06 A07A // 0xA4 A07B // 0x9A A07C // 0x84 A07D // 0x03 A07E // 0x85 A07F // 'S' A080 // 0xBD A081 // 0x9A A082 // 0xA0 A083 // 0x85 A084 // 'R' A085 // ' ' A086 // '9' A087 // 0xA0 A088 // 0xA4 A089 // 0xD6 A08A // 0x84 A08B // 0x05 A08C // 0xA4 A08D // 0xD7 A08E // 0x84 A08F // 0x06 A090 // 0xA4 A091 // 0xD5 A092 // 0x84 A093 // 0x03 A094 // 0xA9 A095 // 0x0D A096 // 0x91 A097 // 0x05 A098 // '`' A099 // 'S' A09A // 'D' A09B // 'D' A09C // 'O' A09D // 'S' A09E // 0xA7 A09F // 0xB4 A0A0 // 0xC5 A0A1 // 'X' A0A2 // 'C' A0A3 // 'A' A0A4 // 'T' A0A5 // 0xA1 A0A6 // 'i' A0A7 // 'D' A0A8 // 'E' A0A9 // 'L' A0AA // 'E' A0AB // 'T' A0AC // 'E' A0AD // 0xA2 A0AE // 0x96 A0AF // 'D' A0B0 // 'I' A0B1 // 'R' A0B2 // 0xA2 A0B3 // 0xB9 A0B4 // 'D' A0B5 // 'R' A0B6 // 'I' A0B7 // 'V' A0B8 // 'E' A0B9 // 0xA2 A0BA // 0xBF A0BB // 'I' A0BC // 'N' A0BD // 'F' A0BE // 'O' A0BF // 0xA2 A0C0 // 0xD4 A0C1 // 'I' A0C2 // 'N' A0C3 // 'F' A0C4 // 'A' A0C5 // 'L' A0C6 // 'L' A0C7 // 0xA2 A0C8 // 0xDA A0C9 // 'L' A0CA // 'O' A0CB // 'A' A0CC // 'D' A0CD // 0xA2 A0CE // 0xF1 A0CF // 'L' A0D0 // 'O' A0D1 // 'C' A0D2 // 'K' A0D3 // 0xA3 A0D4 // 0x9C A0D5 // 'M' A0D6 // 'O' A0D7 // 'N' A0D8 // 0xA3 A0D9 // 0xA0 A0DA // 'N' A0DB // 'O' A0DC // 'M' A0DD // 'O' A0DE // 'N' A0DF // 0xA3 A0E0 // 0xAA A0E1 // 'R' A0E2 // 'U' A0E3 // 'N' A0E4 // 0xA3 A0E5 // 0xAF A0E6 // 'S' A0E7 // 'A' A0E8 // 'V' A0E9 // 'E' A0EA // 0xA3 A0EB // 0xBB A0EC // 'S' A0ED // 'E' A0EE // 'T' A0EF // 0xA5 A0F0 // 'Y' A0F1 // 'T' A0F2 // 'I' A0F3 // 'T' A0F4 // 'L' A0F5 // 'E' A0F6 // 0xA5 A0F7 // 'g' A0F8 // 'U' A0F9 // 'N' A0FA // 'L' A0FB // 'O' A0FC // 'C' A0FD // 'K' A0FE // 0xA5 A0FF // 0xD1 A100 // 'U' A101 // 'S' A102 // 'E' A103 // 0xA5 A104 // 0xF0 A105 // 'C' A106 // 'O' A107 // 'S' A108 // 0xA8 A109 // 0x0F A10A // 'D' A10B // 'O' A10C // 'S' A10D // 0xA8 A10E // '*' A10F // 'D' A110 // 'I' A111 // 'N' A112 // 0xA8 A113 // '0' A114 // 'D' A115 // 'C' A116 // 'A' A117 // 'T' A118 // 0xA8 A119 // 0x93 A11A // 'D' A11B // 'D' A11C // 'I' A11D // 'S' A11E // 'K' A11F // 'S' A120 // 0xA9 A121 // '>' A122 // 'D' A123 // 'P' A124 // 'R' A125 // 'O' A126 // 'T' A127 // 0xA9 A128 // 0x85 A129 // 'D' A12A // 'U' A12B // 'N' A12C // 'P' A12D // 'R' A12E // 'O' A12F // 'T' A130 // 0xA9 A131 // 0x9D A132 // 'D' A133 // 'F' A134 // 'R' A135 // 'E' A136 // 'E' A137 // 0xA9 A138 // 0xB5 A139 // 'D' A13A // 'K' A13B // 'I' A13C // 'L' A13D // 'L' A13E // 0xAA A13F // '#' A140 // 'D' A141 // 'R' A142 // 'E' A143 // 'S' A144 // 'T' A145 // 'O' A146 // 'R' A147 // 'E' A148 // 0xAA A149 // 'a' A14A // 'D' A14B // 'N' A14C // 'E' A14D // 'W' A14E // 0xAA A14F // 'v' A150 // 'D' A151 // 'F' A152 // 'O' A153 // 'R' A154 // 'M' A155 // 0xAA A156 // 0xEE A157 // 'D' A158 // 'O' A159 // 'N' A15A // 'B' A15B // 'O' A15C // 'O' A15D // 'T' A15E // 0xAB A15F // 'd' A160 // 'D' A161 // 'H' A162 // 'E' A163 // 'L' A164 // 'P' A165 // 0xAB A166 // 0x81 A167 // 0xA6 A168 // 0x00 /****** XCAT *******/ A169 JSR A2B9; X = 00; mem[B6] = X; A170 A = mem[2000 + X]; cmp = X <> 08; if(!C) JMP A17A; A = mem[20F8 + X]; A17A JSR FFF4;/* OSWRCH */ X++; cmp = X <> 0D; if(cmp != 0) JMP A170; JSR F7D1;/* print string, data: ' DR:'*/ A = mem[EE]; JSR F80B;/* Print nibble in hex via OSWRCH */ JSR F7D1;/* print string, data: ' Q:'*/ A = mem[AC]; JSR FFF4;/* OSWRCH */ JSR F7D1;/* print string, data: ' DSK:'*/ A = mem[EE]; ASL A; Y = A; X = mem[(F0 + Y)&0xFF]; A = mem[00F1 + Y]; Y = A; JSR AD8A; A1B1 Y = 00; JSR A1CC; if(!C) JMP A202; A1B8 JSR AE17; A = mem[2008 + Y]; X &= 7F; mem[2008 + Y] = A; A = Y; if(cmp != 0) JMP A1B8; JMP FFED;/* OSCRLF write */ A1C9 JSR AE0E; A1CC cmp = Y <> mem[2105]; if(C) JMP A1D6; A = mem[2008 + Y]; if(cmp < 0) JMP A1C9; A1D6 RTS; A1D7 Y = mem[B8]; if(cmp == 0) JMP A1E0; JSR FFED;/* OSCRLF write */ Y = FF; A1E0 Y++ mem[B8] = Y; JSR AE05; A1E6 A = 23; Y = mem[B7]; X = mem[200F + Y]; if(cmp < 0) JMP A1F1; A = 20; A1F1 JSR FFF4;/* OSWRCH */ X = 00; A1F6 A = mem[(AE + X)&0xFF]; JSR FFF4;/* OSWRCH */ X++; cmp = X <> 07; if(cmp != 0) JMP A1F6; if(cmp == 0) JMP A1B1; A202 mem[B7] = Y; X = 00; A206 A = mem[2008 + Y]; X &= 7F; mem[(AE + X)&0xFF] = A; Y++ X++; cmp = X <> 08; if(cmp != 0) JMP A206; A213 JSR A1CC; if(C) JMP A235; X = 06; SEC; A21B A = mem[200E + Y]; A -= mem[(AE + X)&0xFF] - C; Y--; X--; if(cmp > 0) JMP A21B; JSR AE0F; A = mem[200F + Y]; X &= 7F; A -= mem[B5] - C; if(!C) JMP A202; JSR AE0E; if(C) JMP A213; A235 Y = mem[B7]; A = mem[2008 + Y]; X |= 80; mem[2008 + Y] = A; A = mem[B5]; cmp = A <> mem[B6]; if(cmp == 0) JMP A1D7; mem[B6] = A; JSR FFED;/* OSCRLF write */ A = mem[B5]; JSR FFF4;/* OSWRCH */ A = 3A; JSR FFF4;/* OSWRCH */ Y = 04; JSR AE07; mem[B8] = Y; if(cmp == 0) JMP A1E6; A = mem[210E + Y]; JSR AE21; mem[A2] = A; CLC; A = FF; A += mem[210C + Y] + C; A = mem[210F + Y]; A += mem[210D + Y] + C; mem[A3] = A; A = mem[210E + Y]; X &= 0F; A += mem[A2] + C; mem[A2] = A; SEC; A = mem[2107 + Y]; A -= mem[A3] - C; PHA; A = mem[2106 + Y]; X &= 0F; A -= mem[A2] - C; X = A; A = 00; cmp = A <> mem[A0]; PLA; A -= mem[A1] - C; A = X; X -= 00 - C; RTS; /****** DELETE *******/ A296 JSR ADE6; A = mem[200F + Y]; if(cmp < 0) JMP A2AF; JSR A6D8; JSR A641; Y = mem[9A]; JSR A78B; JSR AC7F; JMP A335; A2AF JSR F7D1;/* print string, data: 'PROT?'*/ BRK; /****** DIR *******/ A2B9 JSR A2BF; JMP AC31; /****** DRIVE *******/ A2BF JSR F876;/* Get Next Non-Space Character from #100 Buffer subroutine */ cmp = A <> 0D; if(cmp == 0) JMP A2D3; JSR AD40; A ^= mem[EE]; cmp = A <> 80; if(cmp == 0) JMP A2D3; A ^= mem[EE]; mem[EE] = A; A2D3 RTS; /****** INFO *******/ A2D4 JSR ADE6; JMP A6DC; /****** INFALL *******/ A2DA JSR AC31; Y = 00; mem[9A] = Y; A2E1 JSR A6DC; Y = mem[9A]; JSR AE0E; mem[9A] = Y; cmp = Y <> mem[2105]; if(cmp != 0) JMP A2E1; RTS; /****** LOAD *******/ A2F1 JSR A741; X = 9C; JSR F893;/* Read 4 Hexadecimal Characters from #100 buffer subroutine */ if(cmp == 0) JMP A2FF; A = FF; mem[9E] = A; A2FF X = 9A; CLC; JMP mem[020C] /* LODVEC Load file */ /******************/ A305 JSR ADE9; X = 00; A = mem[9E]; if(cmp > 0) JMP A312; X = 02; Y++ Y++ A312 A = mem[2108 + Y]; mem[(9C + X)&0xFF] = A; Y++ X++; cmp = X <> 08; if(cmp != 0) JMP A312; A = mem[9C]; mem[F9] = A; A = mem[9D]; mem[FA] = A; A = mem[A0]; mem[FB] = A; A = mem[A1]; mem[FC] = A; JSR A33A; Y = mem[9A]; JSR A6D8; A335 A = mem[AD]; mem[AC] = A; RTS; A33A JSR AC8F; cmp = 0 <> mem[FD]; if(cmp < 0) JMP A344; JMP A34F; A344 JSR AEA1; JSR A393; X = 01; JMP A354; A34F JSR AEA1; X = 02; A354 Y = 00; A356 JSR AFFB; memory[memory[F9]+Y] = A; A = mem[FB]; if(cmp != 0) JMP A361; mem[FC]--; A361 mem[FB]--; A = mem[FB]; A |= mem[FC]; if(cmp == 0) JMP A381; Y++ if(cmp != 0) JMP A356; mem[FA]++; X--; if(cmp != 0) JMP A354; JSR AEB0; mem[84]++; if(cmp != 0) JMP A37E; mem[85]++; if(cmp != 0) JMP A37E; mem[86]++; A37E JMP A34F; A381 cmp = X <> 00; if(cmp == 0) JMP A389; JSR A395; X--; A389 cmp = X <> 00; if(cmp == 0) JMP A390; JSR A393; A390 JMP AEB0; A393 Y = 00; A395 JSR AFFB; Y++ if(cmp != 0) JMP A395; RTS; /****** LOCK *******/ A39C SEC; JMP A5D2; /****** MON *******/ A3A0 X = 00; A3A2 JSR ADF2; mem[EF] = X; JMP A335; /****** NOMON *******/ A3AA X = FF; JMP A3A2; /****** RUN *******/ A3AF JSR A741; JSR A62F; JSR A2FF; JMP mem[009E] /* DOS workspace */ /****** SAVE *******/ A3BB JSR A741; X = 9C; JSR FA65;/* Read 4 Hex Characters from #100 buffer with Invalid Test subroutine */ X = A2; JSR FA65;/* Read 4 Hex Characters from #100 buffer with Invalid Test subroutine */ X = 9E; JSR F893;/* Read 4 Hexadecimal Characters from #100 buffer subroutine */ PHP; A = mem[9C]; X = mem[9D]; PLP; if(cmp != 0) JMP A3D9; mem[9E] = A; mem[9F] = X; A3D9 mem[A0] = A; mem[A1] = X; mem[03] = Y; JSR FA76;/* COS Post Test subroutine */ X = 9A; CLC; JMP mem[020E] /* SAVVEC Save file */ /******************/ A3E8 JSR A66F; JSR AC31; JSR A641; JSR A6A9; if(!C) JMP A3F9; JSR A78B; A3F9 A = mem[A0]; PHA; A = mem[A1]; PHA; SEC; A = mem[A2]; A -= mem[A0] - C; mem[A0] = A; A = mem[A3]; A -= mem[A1] - C; mem[A1] = A; A = 00; mem[A2] = A; A = 02; mem[A3] = A; Y = mem[2105]; if(cmp == 0) JMP A45D; cmp = X <> F8; if(!C) JMP A426; JSR F7D1;/* print string, data: 'FULL'*/ BRK; A426 JSR A4BF; JMP A432; A42C JSR AE17; JSR A4A0; A432 A = Y; if(cmp == 0) JMP A437; if(!C) JMP A42C; A437 if(C) JMP A445; JSR F7D1;/* print string, data: 'NO ROOM'*/ BRK; A445 mem[EA] = Y; Y = mem[2105]; A44A cmp = Y <> mem[EA]; if(cmp == 0) JMP A45D; A = mem[2007 + Y]; mem[200F + Y] = A; A = mem[2107 + Y]; mem[210F + Y] = A; Y--; if(C) JMP A44A; A45D X = 00; A45F A = mem[(A5 + X)&0xFF]; mem[2008 + Y] = A; Y++ X++; cmp = X <> 08; if(cmp != 0) JMP A45F; A46A A = mem[(9B + X)&0xFF]; Y--; mem[2108 + Y] = A; X--; if(cmp != 0) JMP A46A; JSR A6D8; PLA; mem[9D] = A; PLA; mem[9C] = A; Y = mem[2105]; JSR AE0E; mem[2105] = Y; JSR AC7F; A = mem[9C]; mem[F9] = A; A = mem[9D]; mem[FA] = A; A = mem[A1]; mem[FB] = A; A = mem[A0]; if(cmp == 0) JMP A49A; mem[FB]++; A49A JSR A4D9; JMP A335; A4A0 A = mem[210E + Y]; JSR AE21; mem[A2] = A; CLC; A = FF; A += mem[210C + Y] + C; A = mem[210F + Y]; A += mem[210D + Y] + C; mem[A3] = A; A = mem[210E + Y]; X &= 0F; A += mem[A2] + C; mem[A2] = A; A4BF SEC; A = mem[2107 + Y]; A -= mem[A3] - C; PHA; A = mem[2106 + Y]; X &= 0F; A -= mem[A2] - C; X = A; A = 00; cmp = A <> mem[A0]; PLA; A -= mem[A1] - C; A = X; X -= 00 - C; RTS; A4D9 JSR AC8F; cmp = 0 <> mem[FD]; if(cmp < 0) JMP A4E3; JMP A4F6; A4E3 JSR A532; mem[FA]--; JSR AEB9; JSR A54E; JSR A545; X = 01; JMP A507; A4F6 A = mem[FB]; cmp = A <> 01; if(cmp != 0) JMP A502; JSR A532; JSR A545; A502 JSR AEB9; X = 02; A507 JSR A54E; mem[FA]++; mem[FB]--; if(cmp == 0) JMP A523; X--; if(cmp != 0) JMP A507; JSR AED9; mem[84]++; if(cmp != 0) JMP A520; mem[85]++; if(cmp != 0) JMP A520; mem[86]++; A520 JMP A4F6; A523 cmp = X <> 02; if(cmp != 0) JMP A52F; JSR ABF3; mem[FA]++; JSR A54E; A52F JMP AED9; A532 A = X; PHA; A = mem[F9]; mem[FE] = A; A = mem[FA]; mem[FF] = A; JSR ABF3; JSR AE73; PLA; X = A; RTS; A545 A = mem[FF]; mem[FA] = A; A = mem[FE]; mem[F9] = A; RTS; A54E Y = 00; A550 A = memory[memory[F9]+Y]; JSR AFFD; Y++ if(cmp != 0) JMP A550; RTS; /****** SET *******/ A559 Y = mem[03]; Y++ JSR FA76;/* COS Post Test subroutine */ A = mem[00FF + Y]; mem[AC] = A; mem[AD] = A; RTS; /****** TITLE *******/ A567 JSR A741; JSR AC31; X = FF; A56F X++; A = mem[0140 + X]; cmp = A <> 0D; if(cmp != 0) JMP A56F; cmp = X <> 0E; if(C) JMP A57E; JMP A588; A57E JSR F7D1;/* print string, data: 'NAME?'*/ BRK; A588 A = mem[EE]; JSR ADAC; JSR AC1A; JSR A641; Y = 00; A595 A = mem[0140 + Y]; cmp = A <> 0D; if(cmp == 0) JMP A5AF; memory[memory[87]+Y] = A; cmp = X <> 08; if(C) JMP A5A8; mem[2000 + Y] = A; JMP A5AB; A5A8 mem[20F8 + Y] = A; A5AB Y++ JMP A595; A5AF cmp = X <> 0D; if(cmp == 0) JMP A5C8; A = 20; memory[memory[87]+Y] = A; cmp = X <> 08; if(C) JMP A5C1; mem[2000 + Y] = A; JMP A5C4; A5C1 mem[20F8 + Y] = A; A5C4 Y++ JMP A5AF; A5C8 JSR AC2A; JSR AC7F; JMP ABE4; /****** UNLOCK *******/ A5D1 CLC; A5D2 PHP; JSR A741; JSR A66F; JSR A69A; JSR A641; A = mem[AC]; ROL A; PLP; ROR A; mem[200F + Y] = A; JSR A6D8; JSR AC7F; JMP A335; /****** USE *******/ A5F0 A = mem[AC]; mem[AD] = A; Y = mem[03]; Y++ JSR FA76;/* COS Post Test subroutine */ A = mem[00FF + Y]; mem[AC] = A; RTS; /******************/ A600 JSR A741; JSR A66F; JSR A62F; JSR A6A9; if(C) JMP A611; JMP F926;/* external */ A611 A = mem[EE]; mem[C7] = A; A = mem[AC]; mem[C8] = A; A = 20; mem[AC] = A; A = 00; mem[EE] = A; JSR A2FF; A = mem[C7]; mem[EE] = A; A = mem[C8]; mem[AC] = A; JMP mem[009E] /* DOS workspace */ A62F JSR F876;/* Get Next Non-Space Character from #100 Buffer subroutine */ X = 00; A634 A = mem[0100 + Y]; mem[0100 + X] = A; X++; Y++ cmp = A <> 00; if(cmp != 0) JMP A634; RTS; A641 A = mem[F8]; JMP A65C; A646 Y = 0F; A = memory[memory[87]+Y]; A64A cmp = A <> FF; if(cmp != 0) JMP A66E; JSR F7D1;/* print string, data: 'NOT VALID'*/ BRK; A65C cmp = A <> 00; if(cmp != 0) JMP A66E; JSR F7D1;/* print string, data: 'DISK PROT'*/ BRK; A66E RTS; A66F Y = 00; A671 A = mem[(00 + X)&0xFF]; mem[009A + Y] = A; X++; Y++ cmp = X <> 0A; if(!C) JMP A671; A = 20; Y = 06; A680 mem[00A5 + Y] = A; Y--; if(cmp > 0) JMP A680; A686 Y++ A = memory[memory[9A]+Y]; cmp = A <> 0D; if(cmp == 0) JMP A696; cmp = X <> 07; if(C) JMP A697; mem[00A5 + Y] = A; if(cmp != 0) JMP A686; A696 RTS; A697 JMP A57E; A69A JSR A6A9; if(C) JMP A696; JSR F7D1;/* print string, data: 'FILE?'*/ BRK; A6A9 JSR AC31; Y = F8; A6AE JSR AE0E; cmp = Y <> mem[2105]; if(C) JMP A6D6; A = mem[200F + Y]; X &= 7F; cmp = A <> mem[AC]; if(cmp != 0) JMP A6AE; JSR AE0F; X = 06; A6C4 A = mem[2007 + Y]; cmp = A <> mem[(A5 + X)&0xFF]; if(cmp != 0) JMP A6D0; Y--; X--; if(cmp > 0) JMP A6C4; RTS; A6D0 Y--; X--; if(cmp > 0) JMP A6D0; if(cmp < 0) JMP A6AE; A6D6 CLC; RTS; A6D8 A = mem[EF]; if(cmp != 0) JMP A740; A6DC A = mem[200F + Y]; X &= 7F; JSR FFF4;/* OSWRCH */ JSR F7FD;/* Print a Space */ X = mem[200F + Y]; if(cmp > 0) JMP A6EE; A = 23; A6EE JSR FFF4;/* OSWRCH */ X = 07; A6F3 A = mem[2008 + Y]; JSR FFF4;/* OSWRCH */ Y++ X--; if(cmp != 0) JMP A6F3; A6FD JSR F7FD;/* Print a Space */ A = mem[2102 + Y]; JSR F802;/* Prints the contents of the accumulator in hex */ A = mem[2101 + Y]; JSR F802;/* Prints the contents of the accumulator in hex */ Y++ X++; Y++ cmp = X <> 02; if(!C) JMP A6FD; JSR F7FD;/* Print a Space */ JSR F7FD;/* Print a Space */ A = mem[2103 + Y]; JSR AE21; JSR F80B;/* Print nibble in hex via OSWRCH */ A = mem[2102 + Y]; JSR F802;/* Prints the contents of the accumulator in hex */ A = mem[2101 + Y]; JSR F802;/* Prints the contents of the accumulator in hex */ JSR F7FD;/* Print a Space */ A = mem[2103 + Y]; JSR F80B;/* Print nibble in hex via OSWRCH */ A = mem[2104 + Y]; JSR F802;/* Prints the contents of the accumulator in hex */ JSR FFED;/* OSCRLF write */ A740 RTS; A741 X = 00; Y = mem[9A]; JSR F876;/* Get Next Non-Space Character from #100 Buffer subroutine */ cmp = A <> 22; if(cmp == 0) JMP A76C; A74C cmp = A <> 0D; if(cmp == 0) JMP A75C; mem[0140 + X] = A; X++; Y++ A = mem[0100 + Y]; cmp = A <> 20; if(cmp != 0) JMP A74C; A75C A = 0D; mem[0140 + X] = A; A = 40; mem[9A] = A; A = 01; mem[9B] = A; X = 9A; RTS; A76C Y++ A = mem[0100 + Y]; cmp = A <> 0D; if(cmp == 0) JMP A788; mem[0140 + X] = A; X++; cmp = A <> 22; if(cmp != 0) JMP A76C; X--; Y++ A = mem[0100 + Y]; cmp = A <> 22; if(cmp != 0) JMP A75C; X++; if(C) JMP A76C; A788 JMP A57E; A78B A = mem[200F + Y]; if(cmp < 0) JMP A7A9; A790 A = mem[2010 + Y]; mem[2008 + Y] = A; A = mem[2110 + Y]; mem[2108 + Y] = A; Y++ cmp = Y <> mem[2105]; if(!C) JMP A790; A = Y; X -= 08 - C; mem[2105] = A; RTS; A7A9 JMP A2AF; A7AC // 'S' A7AD // 'D' A7AE // 'D' A7AF // 'O' A7B0 // 'S' A7B1 // ' ' A7B2 // ' ' A7B3 // ' ' A7B4 // ' ' A7B5 // '&' A7B6 // 0xAE /******************/ A7B7 JSR AC05; Y = 07; A7BC A = mem[2308 + Y]; cmp = A <> mem[A7AC + Y]; if(cmp == 0) JMP A7D3; JSR F7D1;/* print string, data: 'SD FORMAT?'*/ BRK; A7D3 Y--; if(cmp > 0) JMP A7BC; Y = 07; A7D8 A = mem[2300 + Y]; mem[00F0 + Y] = A; Y--; if(cmp > 0) JMP A7D8; A = 3C; mem[0206] = A; A = A0; mem[0207] = A; X = 03; A7ED A = mem[A80B + X]; mem[020C + X] = A; X--; if(cmp > 0) JMP A7ED; A = 20; mem[AC] = A; mem[AD] = A; X ^= 20; mem[EE] = A; mem[C0] = A; mem[B9] = A; mem[BA] = A; Y = FF; mem[EF] = Y; RTS; A80B // 0x05 A80C // 0xA3 A80D // 0xE8 A80E // 0xA3 /****** COS *******/ A80F JSR ADF2; X = 0F; A814 A = mem[FFA2 + X]; mem[020C + X] = A; X--; if(cmp > 0) JMP A814; A = mem[FF9C]; mem[0206] = A; A = mem[FF9D]; mem[0207] = A; RTS; /****** DOS *******/ A82A JSR ADF2; JMP E000;/* external */ /****** DIN *******/ A830 JSR AD40; JSR AD57; JSR ADF2; A839 X = FF; A = mem[83]; cmp = A <> mem[F1]; if(cmp != 0) JMP A84E; A = mem[82]; cmp = A <> mem[F0]; if(cmp != 0) JMP A84E; mem[F0] = X; mem[F1] = X; JMP A884; A84E A = mem[83]; cmp = A <> mem[F3]; if(cmp != 0) JMP A861; A = mem[82]; cmp = A <> mem[F2]; if(cmp != 0) JMP A861; mem[F2] = X; mem[F3] = X; JMP A884; A861 A = mem[83]; cmp = A <> mem[F5]; if(cmp != 0) JMP A874; A = mem[82]; cmp = A <> mem[F4]; if(cmp != 0) JMP A874; mem[F4] = X; mem[F5] = X; JMP A884; A874 A = mem[83]; cmp = A <> mem[F7]; if(cmp != 0) JMP A884; A = mem[82]; cmp = A <> mem[F6]; if(cmp != 0) JMP A884; mem[F6] = X; mem[F7] = X; A884 A = mem[80]; ASL A; X = A; A = mem[82]; mem[(F0 + X)&0xFF] = A; A = mem[83]; mem[(F1 + X)&0xFF] = A; JMP ABE4; /****** DCAT *******/ A893 JSR AD57; A = mem[82]; mem[92] = A; A = mem[83]; mem[93] = A; JSR AD57; A = mem[82]; mem[94] = A; A = mem[83]; mem[95] = A; JSR F876;/* Get Next Non-Space Character from #100 Buffer subroutine */ cmp = A <> 0D; if(cmp == 0) JMP A8C9; Y = mem[03]; A = memory[memory[05]+Y]; cmp = A <> 0D; if(cmp == 0) JMP A8C9; mem[96] = A; Y++ A = memory[memory[05]+Y]; cmp = A <> 0D; if(cmp != 0) JMP A932; mem[03] = Y; JSR C231;/* Search for ',', executing BRK if failure */ JMP A8CD; A8C9 X = 00; mem[96] = X; A8CD JSR FFED;/* OSCRLF write */ A = 00; mem[90] = A; mem[91] = A; A8D6 X = mem[92]; Y = mem[93]; JSR AC11; Y = 0F; A = memory[memory[87]+Y]; if(cmp < 0) JMP A8FF; A = mem[96]; if(cmp == 0) JMP A8EF; Y = 00; A = memory[memory[87]+Y]; cmp = A <> mem[96]; if(cmp != 0) JMP A8FF; A8EF X = mem[92]; Y = mem[93]; JSR ADB9; JSR FFED;/* OSCRLF write */ mem[90]++; if(cmp != 0) JMP A8FF; mem[91]++; A8FF mem[92]++; if(cmp != 0) JMP A905; mem[93]++; A905 A = mem[93]; cmp = A <> mem[95]; if(!C) JMP A8D6; if(cmp != 0) JMP A915; A = mem[92]; cmp = A <> mem[94]; if(!C) JMP A8D6; if(cmp == 0) JMP A8D6; A915 JSR FFED;/* OSCRLF write */ JSR F7D1;/* print string, data: 'DISKS FOUND:'*/ X = mem[90]; Y = mem[91]; JSR AD8A; JMP FFED;/* OSCRLF write */ A932 JSR F7D1;/* print string, data: 'FILTER?'*/ BRK; /****** DDISKS *******/ A93E JSR ADF2; X = 00; mem[80] = X; A945 A = mem[80]; PHA; JSR F80B;/* Print nibble in hex via OSWRCH */ A = 3A; JSR FFF4;/* OSWRCH */ PLA; JSR ADAC; if(cmp < 0) JMP A96E; JSR AC1A; Y = 0F; A = memory[memory[87]+Y]; cmp = A <> FF; if(cmp == 0) JMP A96E; X = mem[82]; Y = mem[83]; JSR ADB9; JSR FFED;/* OSCRLF write */ JMP A97A; A96E JSR F7D1;/* print string, data: ' -'*/ JSR FFED;/* OSCRLF write */ A97A mem[80]++; A = mem[80]; cmp = A <> 04; if(cmp != 0) JMP A945; JMP FFED;/* OSCRLF write */ /****** DPROT *******/ A985 JSR AD57; JSR ADF2; JSR AC1A; JSR A646; Y = 0F; A = 00; memory[memory[87]+Y] = A; JSR AC2A; JMP ABE4; /****** DUNPROT *******/ A99D JSR AD57; JSR ADF2; JSR AC1A; JSR A646; Y = 0F; A = 0F; memory[memory[87]+Y] = A; JSR AC2A; JMP ABE4; /****** DFREE *******/ A9B5 JSR ADF2; A = 00; mem[90] = A; mem[91] = A; mem[92] = A; mem[93] = A; mem[94] = A; mem[95] = A; A9C6 X = mem[94]; Y = mem[95]; JSR AC11; Y = 0F; A = memory[memory[87]+Y]; cmp = A <> FF; if(cmp == 0) JMP A9E5; mem[90]++; if(cmp != 0) JMP A9DB; mem[91]++; A9DB X &= F0; if(cmp == 0) JMP A9E5; mem[92]++; if(cmp != 0) JMP A9E5; mem[93]++; A9E5 mem[94]++; if(cmp != 0) JMP A9EB; mem[95]++; A9EB A = mem[95]; cmp = A <> 03; if(!C) JMP A9C6; if(cmp != 0) JMP A9FB; A = mem[94]; cmp = A <> FE; if(!C) JMP A9C6; if(cmp == 0) JMP A9C6; A9FB X = mem[92]; Y = mem[93]; JSR AD8A; JSR F7D1;/* print string, data: ' OF '*/ X = mem[90]; Y = mem[91]; JSR AD8A; JSR F7D1;/* print string, data: ' DISKS FREE'*/ JMP FFED;/* OSCRLF write */ /****** DKILL *******/ AA23 JSR AD57; JSR ADF2; JSR AC1A; JSR A646; JSR A65C; JSR F7D1;/* print string, data: 'KILL DISK:'*/ JSR ADA5; JSR ADF7; PHA; JSR FFF4;/* OSWRCH */ PLA; cmp = A <> 59; if(cmp == 0) JMP AA52; JMP FFED;/* OSCRLF write */ AA52 JSR FFED;/* OSCRLF write */ Y = 0F; A = F0; memory[memory[87]+Y] = A; JSR AC2A; JMP ABE4; /****** DRESTORE *******/ AA61 JSR AD57; JSR ADF2; AA67 JSR AC1A; Y = 0F; A = 0F; memory[memory[87]+Y] = A; JSR AC2A; JMP ABE4; /****** DNEW *******/ AA76 JSR A2BF; JSR ADF2; A = 00; mem[90] = A; mem[91] = A; AA82 X = mem[90]; Y = mem[91]; JSR AC11; Y = 0F; A = memory[memory[87]+Y]; cmp = A <> F0; if(cmp == 0) JMP AABB; mem[90]++; if(cmp != 0) JMP AA97; mem[91]++; AA97 A = mem[91]; cmp = A <> 03; if(!C) JMP AA82; if(cmp != 0) JMP AAA7; A = mem[90]; cmp = A <> FE; if(!C) JMP AA82; if(cmp == 0) JMP AA82; AAA7 JSR F7D1;/* print string, data: 'NO DISK FOUND'*/ JMP AAEB; AABB A = mem[90]; mem[82] = A; A = mem[91]; mem[83] = A; A = mem[EE]; mem[80] = A; A = 00; JSR A839; JSR F7D1;/* print string, data: 'DISK '*/ JSR ADA5; JSR F7D1;/* print string, data: ' IN DRIVE '*/ A = mem[EE]; JSR F80B;/* Print nibble in hex via OSWRCH */ AAEB JMP FFED;/* OSCRLF write */ /****** DFORM *******/ AAEE JSR AD57; JSR ADF2; JSR AC1A; JSR A646; JSR A65C; JSR F7D1;/* print string, data: 'FORMAT DISK:'*/ JSR ADA5; JSR ADF7; PHA; JSR FFF4;/* OSWRCH */ PLA; cmp = A <> 59; if(cmp == 0) JMP AB1F; JMP FFED;/* OSCRLF write */ AB1F JSR AA67; JSR FFED;/* OSCRLF write */ A = 20; X = 00; AB29 mem[2000 + X] = A; mem[2100 + X] = A; X++; if(cmp != 0) JMP AB29; A = 00; mem[2105] = A; A = 01; mem[2106] = A; A = 90; mem[2107] = A; JSR AC7F; Y = 00; X = 00; AB48 A = mem[2000 + X]; memory[memory[87]+Y] = A; Y++ X++; cmp = X <> 08; if(cmp != 0) JMP AB48; AB53 A = mem[20F8 + X]; memory[memory[87]+Y] = A; Y++ X++; cmp = X <> 0D; if(cmp != 0) JMP AB53; JSR AC2A; JMP ABE4; /****** DONBOOT *******/ AB64 JSR AD40; JSR AD57; JSR ADF2; JSR AC05; A = mem[80]; ASL A; Y = A; A = mem[82]; mem[2300 + Y] = A; A = mem[83]; mem[2301 + Y] = A; JMP AC0B; /****** DHELP *******/ AB81 JSR ADF2; JSR FFED;/* OSCRLF write */ JSR F7D1;/* print string, data: 'SDDOS V2.2(C)KC'*/ JSR FFED;/* OSCRLF write */ JSR FFED;/* OSCRLF write */ Y = 00; ABA2 X = 0F; ABA4 A = mem[A105 + Y]; if(cmp < 0) JMP ABB1; JSR FFF4;/* OSWRCH */ Y++ X--; JMP ABA4; ABB1 cmp = X <> 04; if(cmp == 0) JMP ABBD; A = 20; JSR FFF4;/* OSWRCH */ X--; if(cmp != 0) JMP ABB1; ABBD A = mem[A105 + Y]; JSR F802;/* Prints the contents of the accumulator in hex */ A = mem[A106 + Y]; JSR F802;/* Prints the contents of the accumulator in hex */ A = 20; JSR FFF4;/* OSWRCH */ Y++ Y++ A = mem[A105 + Y]; cmp = A <> A6; if(cmp != 0) JMP ABDE; A = mem[A106 + Y]; cmp = A <> 00; if(cmp == 0) JMP ABE1; ABDE JMP ABA2; ABE1 JMP FFED;/* OSCRLF write */ ABE4 A = mem[EE]; X &= 03; mem[EE] = A; RTS; ABEB A = 00; mem[84] = A; mem[85] = A; mem[86] = A; ABF3 A = 00; mem[F9] = A; A = 23; mem[FA] = A; RTS; ABFC A = 00; mem[F9] = A; A = 20; mem[FA] = A; RTS; AC05 JSR ABEB; JMP AE73; AC0B JSR ABEB; JMP AE8A; AC11 JSR ACB8; JSR ABF3; JMP AE73; AC1A X = mem[82]; Y = mem[83]; JMP AC11; AC21 JSR ACB8; JSR ABF3; JMP AE8A; AC2A X = mem[82]; Y = mem[83]; JMP AC21; AC31 A = mem[EE]; X &= 80; if(cmp == 0) JMP AC3A; JMP AC7C; AC3A A = mem[EE]; JSR ADAC; if(cmp > 0) JMP AC4D; JSR F7D1;/* print string, data: 'NO DISK'*/ BRK; AC4D JSR AC1A; Y = 0F; A = memory[memory[87]+Y]; mem[F8] = A; cmp = A <> F0; if(cmp != 0) JMP AC6A; JSR F7D1;/* print string, data: 'UNFORMATTED'*/ BRK; AC6A JSR A64A; JSR ACE5; JSR ABFC; JSR AE73; A = mem[EE]; X |= 80; mem[EE] = A; AC7C A = mem[F8]; RTS; AC7F JSR ACE5; JSR ABFC; JSR AE8A; A = mem[EE]; X |= 80; mem[EE] = A; RTS; AC8F A = mem[EE]; JSR ADAC; JSR ACE5; A = mem[A3]; LSR A; ROR mem[FD]; CLC; A += mem[84] + C; mem[84] = A; A = mem[A2]; X &= 0F; if(cmp == 0) JMP ACAB; X += 80 + C; mem[84] = A; ACAB A = mem[85]; X += 00 + C; mem[85] = A; A = mem[86]; X += 00 + C; mem[86] = A; RTS; ACB8 X++; mem[84] = X; if(cmp != 0) JMP ACBE; Y++ ACBE mem[85] = Y; A = 00; mem[87] = A; mem[88] = A; X = 04; ACC8 LSR mem[85]; ROR mem[84]; ROR mem[87]; X--; if(cmp != 0) JMP ACC8; LSR mem[85]; ROR mem[84]; ROL mem[88]; CLC; A = mem[87]; X += 00 + C; mem[87] = A; A = mem[88]; X += 23 + C; mem[88] = A; RTS; ACE5 A = 00; mem[84] = A; mem[85] = A; mem[86] = A; mem[8B] = A; A = mem[83]; mem[8A] = A; A = mem[82]; mem[89] = A; JSR AD1C; JSR AD2C; JSR AD1C; JSR AD2C; JSR AD25; JSR AD2C; CLC; A = 20; A += mem[84] + C; mem[84] = A; A = 00; A += mem[85] + C; mem[85] = A; A = 00; A += mem[86] + C; mem[86] = A; AD1C X = 03; AD1E JSR AD25; X--; if(cmp != 0) JMP AD1E; RTS; AD25 ASL mem[89]; ROL mem[8A]; ROL mem[8B]; RTS; AD2C CLC; A = mem[89]; A += mem[84] + C; mem[84] = A; A = mem[8A]; A += mem[85] + C; mem[85] = A; A = mem[8B]; A += mem[86] + C; mem[86] = A; RTS; AD40 JSR AD79; mem[80] = A; cmp = A <> 04; if(C) JMP AD4C; A = mem[80]; RTS; AD4C JSR F7D1;/* print string, data: 'DRIVE?'*/ BRK; AD57 JSR AD79; mem[82] = A; mem[83] = X; A = mem[83]; cmp = A <> 03; if(!C) JMP AD6E; if(cmp != 0) JMP AD6F; A = mem[82]; cmp = A <> FE; if(!C) JMP AD6E; if(cmp != 0) JMP AD6F; AD6E RTS; AD6F JSR F7D1;/* print string, data: 'DISK?'*/ BRK; AD79 JSR C8BC;/* Evaluate X coordinate onto the w/s stack */ JSR C231;/* Search for ',', executing BRK if failure */ Y = 00; mem[04] = Y; A = mem[16]; X = mem[25]; Y = mem[34]; RTS; AD8A A = mem[0321]; PHA; A = 05; mem[0321] = A; mem[16] = X; mem[25] = Y; A = 00; mem[34] = A; mem[43] = A; JSR C589;/* Print line number in decimal in field @ */ PLA; mem[0321] = A; RTS; ADA5 X = mem[82]; Y = mem[83]; JMP AD8A; ADAC ASL A; Y = A; A = mem[00F0 + Y]; mem[82] = A; A = mem[00F1 + Y]; mem[83] = A; RTS; ADB9 JSR AD8A; A = 20; JSR FFF4;/* OSWRCH */ Y = 00; ADC3 A = memory[memory[87]+Y]; cmp = A <> 20; if(cmp > 0) JMP ADCB; A = 20; ADCB JSR FFF4;/* OSWRCH */ Y++ cmp = X <> 0D; if(cmp != 0) JMP ADC3; A = 20; JSR FFF4;/* OSWRCH */ Y = 0F; A = memory[memory[87]+Y]; X &= 0F; if(cmp != 0) JMP ADE5; A = 50; JSR FFF4;/* OSWRCH */ ADE5 RTS; ADE6 JSR A741; ADE9 JSR A66F; JSR A69A; mem[9A] = Y; RTS; ADF2 Y = mem[03]; JMP FA76;/* external */ ADF7 JSR F7D1;/* print string, data: ' :(Y/N)'*/ JMP FE94;/* external */ AE05 Y = 06; AE07 JSR F7FD;/* Print a Space */ Y--; if(cmp != 0) JMP AE07; RTS; AE0E Y++ AE0F Y++ Y++ Y++ Y++ Y++ Y++ Y++ RTS; AE17 Y--; Y--; Y--; Y--; Y--; Y--; Y--; Y--; RTS; AE20 // 'J' AE21 LSR A; LSR A; LSR A; LSR A; RTS; /******************/ AE26 A = ED; mem[023E] = A; A = AE; mem[023F] = A; A = 80; mem[022B] = A; JSR AF23; if(C) JMP AE63; A = FA; mem[023E] = A; A = AE; mem[023F] = A; A = 40; mem[022B] = A; JSR AF54; JSR AF23; if(C) JMP AE63; A = 64; mem[023E] = A; A = AE; mem[023F] = A; A = 00; mem[022B] = A; JMP AE64; AE63 RTS; AE64 JSR F7D1;/* print string, data: 'INTERFACE?'*/ BRK; AE73 JSR AEA1; X = 02; Y = 00; AE7A JSR AFFB; memory[memory[F9]+Y] = A; Y++ if(cmp != 0) JMP AE7A; mem[FA]++; X--; if(cmp != 0) JMP AE7A; JMP AEB0; AE8A JSR AEB9; X = 02; Y = 00; AE91 A = memory[memory[F9]+Y]; JSR AFFD; Y++ if(cmp != 0) JMP AE91; mem[FA]++; X--; if(cmp != 0) JMP AE91; JMP AED9; AEA1 JSR AFE5; A = 51; JSR AF6E; if(cmp != 0) JMP AECB; A = FE; JMP AFBF; AEB0 JSR AFFB; JSR AFFB; JMP AFAF; AEB9 JSR AFE5; A = 58; JSR AF6E; if(cmp == 0) JMP AEC6; JMP AECB; AEC6 A = FE; JMP AFFD; AECB JSR F7D1;/* print string, data: 'NOT READY'*/ BRK; AED9 JSR AFFB; JSR AFFB; JSR AFFB; A = FF; JSR AFBF; JSR AFFB; JMP AFAF; /******************/ AEED mem[B400] = A; NOP; NOP; NOP; NOP; NOP; NOP; A = mem[B400]; RTS; /******************/ AEFA mem[03D4] = X; mem[03D5] = Y; Y = 08; AF02 PHA; X &= 80; mem[B800] = A; X |= 40; mem[B800] = A; X = mem[B800]; X ^= 40; mem[B800] = A; A = X; ROR A; PLA; ROL A; Y--; if(cmp != 0) JMP AF02; Y = mem[03D5]; X = mem[03D4]; RTS; AF23 X = mem[04]; A = 00; mem[(16 + X)&0xFF] = A; mem[(25 + X)&0xFF] = A; mem[(34 + X)&0xFF] = A; mem[(43 + X)&0xFF] = A; A = 40; JSR AF6E; cmp = A <> 01; if(cmp != 0) JMP AF50; A = 69; JSR AF6E; if(cmp == 0) JMP AF52; A = 00; mem[03D1] = A; AF44 A = 41; JSR AF6E; if(cmp == 0) JMP AF52; mem[03D1]--; if(cmp != 0) JMP AF44; AF50 CLC; RTS; AF52 SEC; RTS; AF54 A = E0; mem[B800] = A; A = FE; mem[B802] = A; A = E0; X = A0; Y = 58; AF64 mem[B800] = A; mem[B800] = X; Y--; if(cmp != 0) JMP AF64; RTS; AF6E PHA; A = mem[022B]; if(cmp == 0) JMP AFA8; JSR AFAB; JSR AFFB; PLA; JSR AFFD; X = mem[04]; A = mem[(43 + X)&0xFF]; JSR AFFD; A = mem[(34 + X)&0xFF]; JSR AFFD; A = mem[(25 + X)&0xFF]; JSR AFFD; A = mem[(16 + X)&0xFF]; JSR AFFD; A = 95; JSR AFFD; Y = 00; AF9B Y--; if(cmp == 0) JMP AFA5; JSR AFFB; X &= FF; if(cmp < 0) JMP AF9B; AFA5 cmp = A <> 00; RTS; AFA8 JMP AE64; AFAB A = 80; if(cmp != 0) JMP AFB1; AFAF A = A0; AFB1 cmp = 0 <> mem[022B]; if(cmp < 0) JMP AFBE; mem[B800] = A; X = 00; AFBB X--; if(cmp != 0) JMP AFBB; AFBE RTS; AFBF Y = 00; mem[03D1] = A; AFC4 Y--; if(cmp == 0) JMP AFD0; JSR AFFB; cmp = A <> mem[03D1]; if(cmp != 0) JMP AFC4; RTS; AFD0 JSR F7D1;/* print string, data: ' RESPONSE ERROR'*/ BRK; AFE5 X = mem[04]; A = mem[84]; ASL A; mem[(25 + X)&0xFF] = A; A = mem[85]; ROL A; mem[(34 + X)&0xFF] = A; A = mem[86]; ROL A; mem[(43 + X)&0xFF] = A; A = 00; mem[(16 + X)&0xFF] = A; RTS; AFFB A = FF; AFFD JMP mem[023E] /* Econet workspace */ Process atommc2-1.6.rom CAT: A13E EXEC: A251 RUN: A52F HELP: A34B INFO: A489 LOAD: A500 MON: FA1A NOMON: FA19 CFG: A1C5 PBD: A1B7 PBV: A1BE SAVE: A565 FATINFO: A2EF CRC: A1F0 IR: A49F /******************/ A000 cmp = 0 <> mem[B001]; if(V) JMP A00A; JSR A088; PLA; RTI; A00A A = Y; PHA; A = X; PHA; JSR A088; mem[CD] = A; X = 00; mem[03CA] = X; A = 2B; mem[800B] = A; A01D A = mem[AFD0 + X]; X &= BF; mem[800D + X] = A; X++; cmp = A <> 20; if(cmp != 0) JMP A01D; cmp = 0 <> mem[B002]; if(V) JMP A058; X--; A030 X &= BF; mem[800D + X] = A; X++; A = mem[AFD0 + X]; cmp = A <> 0D; if(cmp != 0) JMP A030; A = mem[CD]; if(cmp == 0) JMP A049; LSR A; X &= 03; CLC; X += 01 + C; ASL A; ASL A; A049 X = A; Y = 03; A04C A = mem[A825 + X]; X &= BF; mem[801C + Y] = A; X++; Y--; if(cmp > 0) JMP A04C; A058 JSR A07C; A = F0; mem[B40F] = A; JSR A6DA; A = mem[B40F]; ASL A; A ^= mem[B001]; if(cmp > 0) JMP A076; A = B2; mem[020A] = A; A = A0; mem[020B] = A; A076 PLA; X = A; PLA; Y = A; PLA; RTI; A07C X = 0B; A07E A = mem[A835 + X]; mem[0204 + X] = A; X--; if(cmp > 0) JMP A07E; RTS; A088 A = FE; mem[B40F] = A; JSR A6DA; A = mem[B40F]; cmp = A <> AA; if(cmp != 0) JMP A088; A = FE; mem[B40F] = A; JSR A6DA; A = mem[B40F]; cmp = A <> 55; if(cmp != 0) JMP A088; A = 80; mem[B40F] = A; JSR A6DA; A = mem[B40F]; RTS; /******************/ A0B2 PHP; CLD; mem[E4] = X; mem[E5] = Y; X = mem[03CA]; A = mem[A841 + X]; if(cmp == 0) JMP A0CA; X++; mem[03CA] = X; X = mem[E4]; Y = mem[E5]; PLP; RTS; A0CA X = mem[E4]; Y = mem[E5]; A0CE A = 94; mem[020A] = A; A = FE; mem[020B] = A; PLP; JMP mem[020A] /******************/ A0DC X = FF; CLD; A0DF Y = 00; JSR F876;/* Get Next Non-Space Character from #100 Buffer subroutine */ Y--; A0E5 Y++ X++; A0E7 A = mem[A848 + X]; if(cmp < 0) JMP A104; cmp = A <> mem[0100 + Y]; if(cmp == 0) JMP A0E5; X--; A0F2 X++; A = mem[A848 + X]; if(cmp > 0) JMP A0F2; X++; A = mem[0100 + Y]; cmp = A <> 2E; if(cmp != 0) JMP A0DF; Y++ X--; if(C) JMP A0E7; A104 mem[9A] = Y; Y = mem[03]; mem[D5] = Y; Y = mem[05]; mem[D6] = Y; Y = mem[06]; mem[D7] = Y; Y = 01; mem[05] = Y; Y = 00; mem[06] = Y; Y = mem[9A]; mem[03] = Y; mem[53] = A; A = mem[A849 + X]; mem[52] = A; X = 00; JSR A13B; Y = mem[D6]; mem[05] = Y; Y = mem[D7]; mem[06] = Y; Y = mem[D5]; mem[03] = Y; A = 0D; memory[memory[05]+Y] = A; RTS; A13B JMP mem[0052] /* User workspace */ /****** CAT *******/ A13E A = 00; mem[03CD] = A; JSR F876;/* Get Next Non-Space Character from #100 Buffer subroutine */ cmp = A <> 0D; if(cmp == 0) JMP A14D; mem[03CD] = A; A14D A = 00; mem[B402] = A; A152 A = 00; SEC; A155 X -= 01 - C; if(cmp != 0) JMP A155; A = mem[B402]; if(cmp < 0) JMP A152; JSR A70F; cmp = A <> 40; if(cmp != 0) JMP A166; A165 RTS; A166 A = 01; mem[B402] = A; A16B A = 00; SEC; A16E X -= 01 - C; if(cmp != 0) JMP A16E; A = mem[B402]; if(cmp < 0) JMP A16B; JSR A70F; cmp = A <> 40; if(cmp == 0) JMP A165; JSR A6E2; A = mem[B406]; X &= 02; if(cmp != 0) JMP A1A3; A = mem[0140]; Y = 00; X = mem[03CD]; if(cmp == 0) JMP A197; cmp = X <> mem[0140]; if(cmp != 0) JMP A166; A197 JSR FFF4;/* OSWRCH */ Y++ A = mem[0140 + Y]; if(cmp != 0) JMP A197; JSR FFED;/* OSCRLF write */ A1A3 cmp = 0 <> mem[B002]; if(!V) JMP A1A3; A = mem[B001]; ROL A; if(!C) JMP A1A3; ROL A; if(!C) JMP A1A3; ROL A; if(C) JMP A166; JMP FFED;/* OSCRLF write */ /****** PBD *******/ A1B7 A = A0; mem[CE] = A; JMP A1C9; /****** PBV *******/ A1BE A = A2; mem[CE] = A; JMP A1C9; /****** CFG *******/ A1C5 A = F0; mem[CE] = A; A1C9 X = CB; JSR F893;/* Read 4 Hexadecimal Characters from #100 buffer subroutine */ if(cmp != 0) JMP A1E1; A = mem[CE]; mem[B40F] = A; JSR A6DA; A = mem[B40F]; JSR F802;/* Prints the contents of the accumulator in hex */ JMP FFED;/* OSCRLF write */ A1E1 A = mem[CB]; mem[B40E] = A; JSR A6DA; X = mem[CE]; X++; mem[B40F] = X; RTS; /****** CRC *******/ A1F0 X = CF; JSR FA65;/* Read 4 Hex Characters from #100 buffer with Invalid Test subroutine */ X = D1; JSR FA65;/* Read 4 Hex Characters from #100 buffer with Invalid Test subroutine */ Y = FF; mem[C9] = Y; mem[CA] = Y; Y++ if(cmp == 0) JMP A20C; A203 A = 00; JSR A21F; mem[D0]++; mem[D2]--; A20C A = mem[D2]; if(cmp != 0) JMP A203; A = mem[D1]; if(cmp == 0) JMP A217; JSR A21F; A217 X = C9; JSR F7F1;/* Print a 2 Byte Vector in Hexadecimal followed by a Space subroutine */ JMP FFED;/* OSCRLF write */ A21F mem[CB] = A; A221 A = memory[memory[CF]+Y]; mem[CC] = Y; A ^= mem[CA]; mem[CA] = A; LSR A; LSR A; LSR A; LSR A; X = A; ASL A; A ^= mem[C9]; mem[C9] = A; A = X; A ^= mem[CA]; mem[CA] = A; ASL A; ASL A; ASL A; X = A; ASL A; ASL A; A ^= mem[CA]; Y = A; A = X; ROL A; A ^= mem[C9]; mem[CA] = A; mem[C9] = Y; Y = mem[CC]; Y++ mem[CB]--; if(cmp != 0) JMP A221; RTS; /****** EXEC *******/ A251 JSR A779; JSR A5C8; A = 40; mem[AC] = A; A = 01; mem[AD] = A; A = 80; mem[B403] = A; A264 A = 00; SEC; A267 X -= 01 - C; if(cmp != 0) JMP A267; A = mem[B403]; if(cmp < 0) JMP A264; X = 0D; JSR A6F6; A = mem[0140]; mem[CA] = A; A = mem[0141]; mem[CB] = A; A = 00; mem[C9] = A; A = 8E; mem[020A] = A; A = A2; mem[020B] = A; RTS; /******************/ A28E PHP; CLD; A290 A = mem[C9]; if(cmp != 0) JMP A2CD; A = mem[CB]; if(cmp != 0) JMP A29E; A = mem[CA]; cmp = A <> 11; if(!C) JMP A2A0; A29E A = 10; A2A0 mem[C9] = A; A = mem[CA]; SEC; A -= mem[C9] - C; mem[CA] = A; if(C) JMP A2AD; mem[CB]--; A2AD A = mem[C9]; mem[B404] = A; A2B2 A = 00; SEC; A2B5 X -= 01 - C; if(cmp != 0) JMP A2B5; A = mem[B404]; if(cmp < 0) JMP A2B2; cmp = A <> 3F; if(cmp == 0) JMP A2C5; JMP A0CE; A2C5 A = 3F; mem[B406] = A; JSR A6DA; A2CD mem[C9]--; if(cmp != 0) JMP A2E6; A = mem[CA]; A |= mem[CB]; if(cmp != 0) JMP A2E6; A = 94; mem[020A] = A; A = FE; mem[020B] = A; A = mem[B406]; PLP; RTS; A2E6 A = mem[B406]; cmp = A <> 0A; if(cmp == 0) JMP A290; PLP; RTS; /****** FATINFO *******/ A2EF JSR A779; JSR A5C8; A = 40; mem[AC] = A; A = 01; mem[AD] = A; A = 80; mem[B403] = A; A302 A = 00; SEC; A305 X -= 01 - C; if(cmp != 0) JMP A305; A = mem[B403]; if(cmp < 0) JMP A302; X = 0D; JSR A6F6; cmp = 0 <> mem[EA]; if(cmp > 0) JMP A318; RTS; A318 X = 03; JSR A330; X = 07; JSR A330; X = 0B; JSR A330; A = mem[014C]; JSR F802;/* Prints the contents of the accumulator in hex */ JMP FFED;/* OSCRLF write */ A330 A = mem[0140 + X]; JSR F802;/* Prints the contents of the accumulator in hex */ X--; A = mem[0140 + X]; JSR F802;/* Prints the contents of the accumulator in hex */ X--; A = mem[0140 + X]; JSR F802;/* Prints the contents of the accumulator in hex */ X--; A = mem[0140 + X]; JMP F7FA;/* JSR to: Print a Byte in Hexadecimal followed by a Space subroutine */ /****** HELP *******/ A34B X = 00; A34D A = mem[AFD0 + X]; JSR FFF4;/* OSWRCH */ X++; cmp = X <> 30; if(cmp != 0) JMP A34D; JSR F7D1;/* print string, data: '*CAT, *. ([A-Z]) SHOW FILES ON CARD LOAD, *LOAD [FN] ([S]) LOAD PROGRAM OR DATA SAVE [FN] *SAVE [FN] [S] [E] ([R]) SAVE FILE OR DATA *RUN [FN], *[FN] LOAD AND RUN A PROGRAM *INFO [FN] SHOW PROGRAM LOAD/EXEC/LENGTH *EXEC [FN] 'TYPE' CONTENT OF FILE SEE DOCUMENTATION FOR MORE!'*/ RTS; /****** INFO *******/ A489 A = 00; mem[CD] = A; JSR A779; JSR A5C8; JSR A5FB; JSR A73C; JSR A75B; JMP FFED;/* OSCRLF write */ /****** IR *******/ A49F X = AE; JSR FA65;/* Read 4 Hex Characters from #100 buffer with Invalid Test subroutine */ X = 4F; A4A6 A = mem[A4B2 + X]; mem[2800 + X] = A; X--; if(cmp > 0) JMP A4A6; JMP 2800;/* 'user area' */ A4B2 JSR F7D1;/* print string, data: ' ENABLE RAM, PRESS KEY'*/ /******************/ A4CD JSR FFE3;/* OSRDCH */ A = mem[A000]; X = A; X++; mem[A000] = X; cmp = A <> mem[A000]; if(cmp == 0) JMP A4B2; JSR FFED;/* OSCRLF write */ A = A0; mem[AD] = A; Y = 00; mem[AC] = Y; X = 0F; A4EA A = memory[memory[AE]+Y]; memory[memory[AC]+Y] = A; Y++ if(cmp != 0) JMP A4EA; A = 2E; JSR FFF4;/* OSWRCH */ mem[AF]++; mem[AD]++; X--; if(cmp > 0) JMP A4EA; JMP FF3F;/* RESET Routine */ /****** LOAD *******/ A500 JSR A779; JSR F844;/* just before F84F?? Transfer Tape File Control Block and Test Name subroutine */ JMP F95B;/* inside Execute the Command '*LOAD' subroutine */ /******************/ A509 JSR F84F;/* Transfer Tape File Control Block and Test Name subroutine */ JSR A5C8; JSR A5FB; cmp = 0 <> mem[EA]; if(cmp < 0) JMP A51C; JSR A75B; JSR FFED;/* OSCRLF write */ A51C JMP A626; /******************/ A51F Y = 00; A521 A = mem[0100 + Y]; mem[0140 + Y] = A; Y++ cmp = A <> 0D; if(cmp != 0) JMP A521; JMP A532; /****** RUN *******/ A52F JSR A779; A532 A = mem[EA]; PHA; A = FF; mem[EA] = A; JSR F844;/* just before F84F?? Transfer Tape File Control Block and Test Name subroutine */ JSR F95B;/* near: "Execute the Command '*LOAD' subroutine" */ PLA; mem[EA] = A; A = mem[CD]; cmp = A <> B2; if(cmp != 0) JMP A55E; A = mem[CE]; cmp = A <> C2; if(cmp != 0) JMP A55E; A = F2; mem[CD] = A; A = C2; mem[CE] = A; A = 61; mem[05] = A; A = A5; mem[06] = A; A55E JMP mem[00CD] A561 // 'R' A562 // 'U' A563 // 'N' A564 // 0x0D /****** SAVE *******/ A565 JSR A779; JSR F844;/* just before F84F?? Transfer Tape File Control Block and Test Name subroutine */ JMP FABE;/* Execute the Command '*SAVE' (it seems) */ /******************/ A56E JSR F84F;/* Transfer Tape File Control Block and Test Name subroutine */ JSR A5C8; A = mem[CB]; mem[0150] = A; A = mem[CC]; mem[0151] = A; A = mem[CD]; mem[0152] = A; A = mem[CE]; mem[0153] = A; SEC; A = mem[D2]; A -= mem[D0] - C; mem[0155] = A; A = mem[D1]; A -= mem[CF] - C; mem[0154] = A; X = FF; A599 X++; A = mem[0140 + X]; cmp = A <> 0D; if(cmp != 0) JMP A599; A = 00; A5A3 mem[0140 + X] = A; X++; cmp = X <> 10; if(cmp != 0) JMP A5A3; JSR A670; JSR A684; A = 00; mem[B403] = A; A5B6 A = 00; SEC; A5B9 X -= 01 - C; if(cmp != 0) JMP A5B9; A = mem[B403]; if(cmp < 0) JMP A5B6; JSR A70A; JMP FFED;/* OSCRLF write */ A5C8 A = FF; mem[B403] = A; JSR A6DA; X = 00; if(cmp == 0) JMP A5D8; A5D4 mem[B407] = A; X++; A5D8 A = mem[0140 + X]; cmp = A <> 0D; if(cmp != 0) JMP A5D4; A = 00; mem[B407] = A; JSR A6DA; A = 01; mem[B403] = A; A5EC A = 00; SEC; A5EF X -= 01 - C; if(cmp != 0) JMP A5EF; A = mem[B403]; if(cmp < 0) JMP A5EC; JMP A70A; A5FB A = 40; mem[AC] = A; A = 01; mem[AD] = A; A = 16; JSR A649; Y = 05; X = 03; cmp = 0 <> mem[CD]; if(cmp < 0) JMP A612; X = 05; A612 A = mem[0150 + Y]; mem[00CB + Y] = A; Y--; X--; if(cmp > 0) JMP A612; RTS; A61D A = 00; JSR A63F; mem[CC]++; mem[D0]--; A626 A = mem[D0]; if(cmp != 0) JMP A61D; A = mem[CF]; if(cmp == 0) JMP A63E; JSR A63F; A = mem[CB]; CLC; A += mem[CF] + C; mem[CB] = A; if(!C) JMP A63C; mem[CC]++; A63C mem[CF] = X; A63E RTS; A63F PHA; A = mem[CB]; mem[AC] = A; A = mem[CC]; mem[AD] = A; PLA; A649 X = A; mem[B404] = A; A64D A = 00; SEC; A650 X -= 01 - C; if(cmp != 0) JMP A650; A = mem[B404]; if(cmp < 0) JMP A64D; JSR A70A; A = 3F; mem[B406] = A; JSR A6DA; Y = 00; A666 A = mem[B406]; memory[memory[AC]+Y] = A; Y++ X--; if(cmp != 0) JMP A666; RTS; A670 A = 40; mem[AC] = A; A = 01; mem[AD] = A; A = 16; JMP A6B2; A67D A = 00; JSR A6AA; mem[D0]++; A684 A = mem[D0]; cmp = A <> mem[D2]; if(cmp != 0) JMP A67D; A = mem[D1]; cmp = A <> mem[CF]; if(cmp == 0) JMP A696; SEC; A -= mem[CF] - C; JSR A6AA; A696 A = 00; mem[B402] = A; A69B A = 00; SEC; A69E X -= 01 - C; if(cmp != 0) JMP A69E; A = mem[B402]; if(cmp < 0) JMP A69B; JMP A70A; A6AA Y = mem[CF]; mem[AC] = Y; Y = mem[D0]; mem[AD] = Y; A6B2 X = A; PHA; A = FF; mem[B403] = A; JSR A6DA; Y = 00; A6BE A = memory[memory[AC]+Y]; mem[B407] = A; Y++ X--; if(cmp != 0) JMP A6BE; PLA; mem[B405] = A; A6CB A = 00; SEC; A6CE X -= 01 - C; if(cmp != 0) JMP A6CE; A = mem[B405]; if(cmp < 0) JMP A6CB; JMP A70A; A6DA A = 04; SEC; A6DD X -= 01 - C; if(cmp != 0) JMP A6DD; RTS; A6E2 A = 3F; mem[B406] = A; JSR A6DA; Y = FF; A6EC Y++ A = mem[B406]; mem[0140 + Y] = A; if(cmp != 0) JMP A6EC; RTS; A6F6 A = 3F; mem[B406] = A; JSR A6DA; Y = 00; A700 A = mem[B406]; memory[memory[AC]+Y] = A; Y++ X--; if(cmp != 0) JMP A700; RTS; A70A cmp = A <> 3F; if(cmp != 0) JMP A714; RTS; A70F cmp = A <> 41; if(C) JMP A714; RTS; A714 X &= 3F; X = A; Y = FF; A719 Y++ A = mem[AF00 + Y]; cmp = A <> 0D; if(cmp != 0) JMP A719; X--; if(cmp != 0) JMP A719; Y++ A = Y; CLC; X += 00 + C; mem[D5] = A; A = AF; X += 00 + C; mem[D6] = A; A = 69; mem[05] = A; A = AF; mem[06] = A; JMP C2F2;/* in BASIC ROM */ A73C X = 00; if(cmp == 0) JMP A744; A740 JSR FFF4;/* OSWRCH */ X++; A744 A = mem[0140 + X]; cmp = A <> 20; if(!C) JMP A756; cmp = X <> 10; if(cmp != 0) JMP A740; RTS; A750 A = 20; JSR FFF4;/* OSWRCH */ X++; A756 cmp = X <> 10; if(cmp != 0) JMP A750; RTS; A75B A = mem[CC]; JSR F802;/* Prints the contents of the accumulator in hex */ A = mem[CB]; JSR F7FA;/* JSR Print a Byte in Hexadecimal subroutine */ A = mem[CE]; JSR F802;/* Prints the contents of the accumulator in hex */ A = mem[CD]; JSR F7FA;/* JSR Print a Byte in Hexadecimal subroutine */ A = mem[D0]; JSR F802;/* Prints the contents of the accumulator in hex */ A = mem[CF]; JMP F7FA;/* JSR to: Print a Byte in Hexadecimal followed by a Space subroutine */ A779 X = 00; Y = mem[9A]; JSR F876;/* Get Next Non-Space Character from #100 Buffer subroutine */ cmp = A <> 22; if(cmp == 0) JMP A79E; A784 cmp = A <> 0D; if(cmp == 0) JMP A794; mem[0140 + X] = A; X++; Y++ A = mem[0100 + Y]; cmp = A <> 20; if(cmp != 0) JMP A784; A794 A = 0D; mem[0140 + X] = A; cmp = X <> 00; if(cmp == 0) JMP A7BA; RTS; A79E Y++ A = mem[0100 + Y]; cmp = A <> 0D; if(cmp == 0) JMP A7BA; mem[0140 + X] = A; X++; cmp = A <> 22; if(cmp != 0) JMP A79E; X--; Y++ A = mem[0100 + Y]; cmp = A <> 22; if(cmp != 0) JMP A794; X++; if(C) JMP A79E; A7BA JMP FA7D;/* first label in: COS Post Test subroutine */ /******************/ A7BD JSR F876;/* Get Next Non-Space Character from #100 Buffer subroutine */ JSR F87E;/* Convert ASCII Hexadecimal Digit to Binary subroutine */ if(C) JMP A7E0; mem[CB] = A; Y++ A = mem[0100 + Y]; JSR F87E;/* Convert ASCII Hexadecimal Digit to Binary subroutine */ if(C) JMP A7DD; Y++ ASL mem[CB]; ASL mem[CB]; ASL mem[CB]; ASL mem[CB]; A |= mem[CB]; mem[CB] = A; A7DD A = mem[CB]; CLC; A7E0 RTS; /******************/ A7E1 JSR F7D1;/* print string, data: ''*/ JSR FFE3;/* OSRDCH */ PHA; A = 00; mem[E0] = A; JSR F7D1;/* print string, data: ' '*/ A = 00; mem[E0] = A; PLA; RTS; /******************/ A811 A = 20; JSR FFF4;/* OSWRCH */ A816 cmp = X <> mem[E0]; if(C) JMP A811; RTS; /******************/ A81B X = 0A; JMP A816; /******************/ A820 X = 10; JMP A816; A825 // '-' A826 // '-' A827 // '-' A828 // ' ' A829 // 'C' A82A // 'M' A82B // 'M' A82C // ' ' A82D // 'D' A82E // 'S' A82F // ' ' A830 // ' ' A831 // 'C' A832 // 'H' A833 // 'D' A834 // 'S' A835 // 'z' A836 // 0xA0 A837 // 0xDC A838 // 0xA0 A839 // 'R' A83A // 0xFE A83B // 0x94 A83C // 0xFE A83D // 0x09 A83E // 0xA5 A83F // 'n' A840 // 0xA5 A841 // '*' A842 // 'M' A843 // 'E' A844 // 'N' A845 // 'U' A846 // 0x0D A847 // 0x00 A848 // 'C' A849 // 'A' A84A // 'T' A84B // 0xA1 A84C // '>' A84D // 'E' A84E // 'X' A84F // 'E' A850 // 'C' A851 // 0xA2 A852 // 'Q' A853 // 'R' A854 // 'U' A855 // 'N' A856 // 0xA5 A857 // '/' A858 // 'H' A859 // 'E' A85A // 'L' A85B // 'P' A85C // 0xA3 A85D // 'K' A85E // 'I' A85F // 'N' A860 // 'F' A861 // 'O' A862 // 0xA4 A863 // 0x89 A864 // 'L' A865 // 'O' A866 // 'A' A867 // 'D' A868 // 0xA5 A869 // 0x00 A86A // 'M' A86B // 'O' A86C // 'N' A86D // 0xFA A86E // 0x1A A86F // 'N' A870 // 'O' A871 // 'M' A872 // 'O' A873 // 'N' A874 // 0xFA A875 // 0x19 A876 // 'C' A877 // 'F' A878 // 'G' A879 // 0xA1 A87A // 0xC5 A87B // 'P' A87C // 'B' A87D // 'D' A87E // 0xA1 A87F // 0xB7 A880 // 'P' A881 // 'B' A882 // 'V' A883 // 0xA1 A884 // 0xBE A885 // 'S' A886 // 'A' A887 // 'V' A888 // 'E' A889 // 0xA5 A88A // 'e' A88B // 'F' A88C // 'A' A88D // 'T' A88E // 'I' A88F // 'N' A890 // 'F' A891 // 'O' A892 // 0xA2 A893 // 0xEF A894 // 'C' A895 // 'R' A896 // 'C' A897 // 0xA1 A898 // 0xF0 A899 // 'I' A89A // 'R' A89B // 0xA4 A89C // 0x9F A89D // 0xA5 A89E // 0x1F A89F // 0xFF A8A0 // 0xFF A8A1 // 0xFF A8A2 // 0xFF A8A3 // 0xFF A8A4 // 0xFF A8A5 // 0xFF A8A6 // 0xFF A8A7 // 0xFF A8A8 // 0xFF A8A9 // 0xFF A8AA // 0xFF A8AB // 0xFF A8AC // 0xFF A8AD // 0xFF A8AE // 0xFF A8AF // 0xFF A8B0 // 0xFF A8B1 // 0xFF A8B2 // 0xFF A8B3 // 0xFF A8B4 // 0xFF A8B5 // 0xFF A8B6 // 0xFF A8B7 // 0xFF A8B8 // 0xFF A8B9 // 0xFF A8BA // 0xFF A8BB // 0xFF A8BC // 0xFF A8BD // 0xFF A8BE // 0xFF A8BF // 0xFF A8C0 // 0xFF A8C1 // 0xFF A8C2 // 0xFF A8C3 // 0xFF A8C4 // 0xFF A8C5 // 0xFF A8C6 // 0xFF A8C7 // 0xFF A8C8 // 0xFF A8C9 // 0xFF A8CA // 0xFF A8CB // 0xFF A8CC // 0xFF A8CD // 0xFF A8CE // 0xFF A8CF // 0xFF A8D0 // 0xFF A8D1 // 0xFF A8D2 // 0xFF A8D3 // 0xFF A8D4 // 0xFF A8D5 // 0xFF A8D6 // 0xFF A8D7 // 0xFF A8D8 // 0xFF A8D9 // 0xFF A8DA // 0xFF A8DB // 0xFF A8DC // 0xFF A8DD // 0xFF A8DE // 0xFF A8DF // 0xFF A8E0 // 0xFF A8E1 // 0xFF A8E2 // 0xFF A8E3 // 0xFF A8E4 // 0xFF A8E5 // 0xFF A8E6 // 0xFF A8E7 // 0xFF A8E8 // 0xFF A8E9 // 0xFF A8EA // 0xFF A8EB // 0xFF A8EC // 0xFF A8ED // 0xFF A8EE // 0xFF A8EF // 0xFF A8F0 // 0xFF A8F1 // 0xFF A8F2 // 0xFF A8F3 // 0xFF A8F4 // 0xFF A8F5 // 0xFF A8F6 // 0xFF A8F7 // 0xFF A8F8 // 0xFF A8F9 // 0xFF A8FA // 0xFF A8FB // 0xFF A8FC // 0xFF A8FD // 0xFF A8FE // 0xFF A8FF // 0xFF A900 // 0xFF A901 // 0xFF A902 // 0xFF A903 // 0xFF A904 // 0xFF A905 // 0xFF A906 // 0xFF A907 // 0xFF A908 // 0xFF A909 // 0xFF A90A // 0xFF A90B // 0xFF A90C // 0xFF A90D // 0xFF A90E // 0xFF A90F // 0xFF A910 // 0xFF A911 // 0xFF A912 // 0xFF A913 // 0xFF A914 // 0xFF A915 // 0xFF A916 // 0xFF A917 // 0xFF A918 // 0xFF A919 // 0xFF A91A // 0xFF A91B // 0xFF A91C // 0xFF A91D // 0xFF A91E // 0xFF A91F // 0xFF A920 // 0xFF A921 // 0xFF A922 // 0xFF A923 // 0xFF A924 // 0xFF A925 // 0xFF A926 // 0xFF A927 // 0xFF A928 // 0xFF A929 // 0xFF A92A // 0xFF A92B // 0xFF A92C // 0xFF A92D // 0xFF A92E // 0xFF A92F // 0xFF A930 // 0xFF A931 // 0xFF A932 // 0xFF A933 // 0xFF A934 // 0xFF A935 // 0xFF A936 // 0xFF A937 // 0xFF A938 // 0xFF A939 // 0xFF A93A // 0xFF A93B // 0xFF A93C // 0xFF A93D // 0xFF A93E // 0xFF A93F // 0xFF A940 // 0xFF A941 // 0xFF A942 // 0xFF A943 // 0xFF A944 // 0xFF A945 // 0xFF A946 // 0xFF A947 // 0xFF A948 // 0xFF A949 // 0xFF A94A // 0xFF A94B // 0xFF A94C // 0xFF A94D // 0xFF A94E // 0xFF A94F // 0xFF A950 // 0xFF A951 // 0xFF A952 // 0xFF A953 // 0xFF A954 // 0xFF A955 // 0xFF A956 // 0xFF A957 // 0xFF A958 // 0xFF A959 // 0xFF A95A // 0xFF A95B // 0xFF A95C // 0xFF A95D // 0xFF A95E // 0xFF A95F // 0xFF A960 // 0xFF A961 // 0xFF A962 // 0xFF A963 // 0xFF A964 // 0xFF A965 // 0xFF A966 // 0xFF A967 // 0xFF A968 // 0xFF A969 // 0xFF A96A // 0xFF A96B // 0xFF A96C // 0xFF A96D // 0xFF A96E // 0xFF A96F // 0xFF A970 // 0xFF A971 // 0xFF A972 // 0xFF A973 // 0xFF A974 // 0xFF A975 // 0xFF A976 // 0xFF A977 // 0xFF A978 // 0xFF A979 // 0xFF A97A // 0xFF A97B // 0xFF A97C // 0xFF A97D // 0xFF A97E // 0xFF A97F // 0xFF A980 // 0xFF A981 // 0xFF A982 // 0xFF A983 // 0xFF A984 // 0xFF A985 // 0xFF A986 // 0xFF A987 // 0xFF A988 // 0xFF A989 // 0xFF A98A // 0xFF A98B // 0xFF A98C // 0xFF A98D // 0xFF A98E // 0xFF A98F // 0xFF A990 // 0xFF A991 // 0xFF A992 // 0xFF A993 // 0xFF A994 // 0xFF A995 // 0xFF A996 // 0xFF A997 // 0xFF A998 // 0xFF A999 // 0xFF A99A // 0xFF A99B // 0xFF A99C // 0xFF A99D // 0xFF A99E // 0xFF A99F // 0xFF A9A0 // 0xFF A9A1 // 0xFF A9A2 // 0xFF A9A3 // 0xFF A9A4 // 0xFF A9A5 // 0xFF A9A6 // 0xFF A9A7 // 0xFF A9A8 // 0xFF A9A9 // 0xFF A9AA // 0xFF A9AB // 0xFF A9AC // 0xFF A9AD // 0xFF A9AE // 0xFF A9AF // 0xFF A9B0 // 0xFF A9B1 // 0xFF A9B2 // 0xFF A9B3 // 0xFF A9B4 // 0xFF A9B5 // 0xFF A9B6 // 0xFF A9B7 // 0xFF A9B8 // 0xFF A9B9 // 0xFF A9BA // 0xFF A9BB // 0xFF A9BC // 0xFF A9BD // 0xFF A9BE // 0xFF A9BF // 0xFF A9C0 // 0xFF A9C1 // 0xFF A9C2 // 0xFF A9C3 // 0xFF A9C4 // 0xFF A9C5 // 0xFF A9C6 // 0xFF A9C7 // 0xFF A9C8 // 0xFF A9C9 // 0xFF A9CA // 0xFF A9CB // 0xFF A9CC // 0xFF A9CD // 0xFF A9CE // 0xFF A9CF // 0xFF A9D0 // 0xFF A9D1 // 0xFF A9D2 // 0xFF A9D3 // 0xFF A9D4 // 0xFF A9D5 // 0xFF A9D6 // 0xFF A9D7 // 0xFF A9D8 // 0xFF A9D9 // 0xFF A9DA // 0xFF A9DB // 0xFF A9DC // 0xFF A9DD // 0xFF A9DE // 0xFF A9DF // 0xFF A9E0 // 0xFF A9E1 // 0xFF A9E2 // 0xFF A9E3 // 0xFF A9E4 // 0xFF A9E5 // 0xFF A9E6 // 0xFF A9E7 // 0xFF A9E8 // 0xFF A9E9 // 0xFF A9EA // 0xFF A9EB // 0xFF A9EC // 0xFF A9ED // 0xFF A9EE // 0xFF A9EF // 0xFF A9F0 // 0xFF A9F1 // 0xFF A9F2 // 0xFF A9F3 // 0xFF A9F4 // 0xFF A9F5 // 0xFF A9F6 // 0xFF A9F7 // 0xFF A9F8 // 0xFF A9F9 // 0xFF A9FA // 0xFF A9FB // 0xFF A9FC // 0xFF A9FD // 0xFF A9FE // 0xFF A9FF // 0xFF AA00 // 0xFF AA01 // 0xFF AA02 // 0xFF AA03 // 0xFF AA04 // 0xFF AA05 // 0xFF AA06 // 0xFF AA07 // 0xFF AA08 // 0xFF AA09 // 0xFF AA0A // 0xFF AA0B // 0xFF AA0C // 0xFF AA0D // 0xFF AA0E // 0xFF AA0F // 0xFF AA10 // 0xFF AA11 // 0xFF AA12 // 0xFF AA13 // 0xFF AA14 // 0xFF AA15 // 0xFF AA16 // 0xFF AA17 // 0xFF AA18 // 0xFF AA19 // 0xFF AA1A // 0xFF AA1B // 0xFF AA1C // 0xFF AA1D // 0xFF AA1E // 0xFF AA1F // 0xFF AA20 // 0xFF AA21 // 0xFF AA22 // 0xFF AA23 // 0xFF AA24 // 0xFF AA25 // 0xFF AA26 // 0xFF AA27 // 0xFF AA28 // 0xFF AA29 // 0xFF AA2A // 0xFF AA2B // 0xFF AA2C // 0xFF AA2D // 0xFF AA2E // 0xFF AA2F // 0xFF AA30 // 0xFF AA31 // 0xFF AA32 // 0xFF AA33 // 0xFF AA34 // 0xFF AA35 // 0xFF AA36 // 0xFF AA37 // 0xFF AA38 // 0xFF AA39 // 0xFF AA3A // 0xFF AA3B // 0xFF AA3C // 0xFF AA3D // 0xFF AA3E // 0xFF AA3F // 0xFF AA40 // 0xFF AA41 // 0xFF AA42 // 0xFF AA43 // 0xFF AA44 // 0xFF AA45 // 0xFF AA46 // 0xFF AA47 // 0xFF AA48 // 0xFF AA49 // 0xFF AA4A // 0xFF AA4B // 0xFF AA4C // 0xFF AA4D // 0xFF AA4E // 0xFF AA4F // 0xFF AA50 // 0xFF AA51 // 0xFF AA52 // 0xFF AA53 // 0xFF AA54 // 0xFF AA55 // 0xFF AA56 // 0xFF AA57 // 0xFF AA58 // 0xFF AA59 // 0xFF AA5A // 0xFF AA5B // 0xFF AA5C // 0xFF AA5D // 0xFF AA5E // 0xFF AA5F // 0xFF AA60 // 0xFF AA61 // 0xFF AA62 // 0xFF AA63 // 0xFF AA64 // 0xFF AA65 // 0xFF AA66 // 0xFF AA67 // 0xFF AA68 // 0xFF AA69 // 0xFF AA6A // 0xFF AA6B // 0xFF AA6C // 0xFF AA6D // 0xFF AA6E // 0xFF AA6F // 0xFF AA70 // 0xFF AA71 // 0xFF AA72 // 0xFF AA73 // 0xFF AA74 // 0xFF AA75 // 0xFF AA76 // 0xFF AA77 // 0xFF AA78 // 0xFF AA79 // 0xFF AA7A // 0xFF AA7B // 0xFF AA7C // 0xFF AA7D // 0xFF AA7E // 0xFF AA7F // 0xFF AA80 // 0xFF AA81 // 0xFF AA82 // 0xFF AA83 // 0xFF AA84 // 0xFF AA85 // 0xFF AA86 // 0xFF AA87 // 0xFF AA88 // 0xFF AA89 // 0xFF AA8A // 0xFF AA8B // 0xFF AA8C // 0xFF AA8D // 0xFF AA8E // 0xFF AA8F // 0xFF AA90 // 0xFF AA91 // 0xFF AA92 // 0xFF AA93 // 0xFF AA94 // 0xFF AA95 // 0xFF AA96 // 0xFF AA97 // 0xFF AA98 // 0xFF AA99 // 0xFF AA9A // 0xFF AA9B // 0xFF AA9C // 0xFF AA9D // 0xFF AA9E // 0xFF AA9F // 0xFF AAA0 // 0xFF AAA1 // 0xFF AAA2 // 0xFF AAA3 // 0xFF AAA4 // 0xFF AAA5 // 0xFF AAA6 // 0xFF AAA7 // 0xFF AAA8 // 0xFF AAA9 // 0xFF AAAA // 0xFF AAAB // 0xFF AAAC // 0xFF AAAD // 0xFF AAAE // 0xFF AAAF // 0xFF AAB0 // 0xFF AAB1 // 0xFF AAB2 // 0xFF AAB3 // 0xFF AAB4 // 0xFF AAB5 // 0xFF AAB6 // 0xFF AAB7 // 0xFF AAB8 // 0xFF AAB9 // 0xFF AABA // 0xFF AABB // 0xFF AABC // 0xFF AABD // 0xFF AABE // 0xFF AABF // 0xFF AAC0 // 0xFF AAC1 // 0xFF AAC2 // 0xFF AAC3 // 0xFF AAC4 // 0xFF AAC5 // 0xFF AAC6 // 0xFF AAC7 // 0xFF AAC8 // 0xFF AAC9 // 0xFF AACA // 0xFF AACB // 0xFF AACC // 0xFF AACD // 0xFF AACE // 0xFF AACF // 0xFF AAD0 // 0xFF AAD1 // 0xFF AAD2 // 0xFF AAD3 // 0xFF AAD4 // 0xFF AAD5 // 0xFF AAD6 // 0xFF AAD7 // 0xFF AAD8 // 0xFF AAD9 // 0xFF AADA // 0xFF AADB // 0xFF AADC // 0xFF AADD // 0xFF AADE // 0xFF AADF // 0xFF AAE0 // 0xFF AAE1 // 0xFF AAE2 // 0xFF AAE3 // 0xFF AAE4 // 0xFF AAE5 // 0xFF AAE6 // 0xFF AAE7 // 0xFF AAE8 // 0xFF AAE9 // 0xFF AAEA // 0xFF AAEB // 0xFF AAEC // 0xFF AAED // 0xFF AAEE // 0xFF AAEF // 0xFF AAF0 // 0xFF AAF1 // 0xFF AAF2 // 0xFF AAF3 // 0xFF AAF4 // 0xFF AAF5 // 0xFF AAF6 // 0xFF AAF7 // 0xFF AAF8 // 0xFF AAF9 // 0xFF AAFA // 0xFF AAFB // 0xFF AAFC // 0xFF AAFD // 0xFF AAFE // 0xFF AAFF // 0xFF AB00 // 0xFF AB01 // 0xFF AB02 // 0xFF AB03 // 0xFF AB04 // 0xFF AB05 // 0xFF AB06 // 0xFF AB07 // 0xFF AB08 // 0xFF AB09 // 0xFF AB0A // 0xFF AB0B // 0xFF AB0C // 0xFF AB0D // 0xFF AB0E // 0xFF AB0F // 0xFF AB10 // 0xFF AB11 // 0xFF AB12 // 0xFF AB13 // 0xFF AB14 // 0xFF AB15 // 0xFF AB16 // 0xFF AB17 // 0xFF AB18 // 0xFF AB19 // 0xFF AB1A // 0xFF AB1B // 0xFF AB1C // 0xFF AB1D // 0xFF AB1E // 0xFF AB1F // 0xFF AB20 // 0xFF AB21 // 0xFF AB22 // 0xFF AB23 // 0xFF AB24 // 0xFF AB25 // 0xFF AB26 // 0xFF AB27 // 0xFF AB28 // 0xFF AB29 // 0xFF AB2A // 0xFF AB2B // 0xFF AB2C // 0xFF AB2D // 0xFF AB2E // 0xFF AB2F // 0xFF AB30 // 0xFF AB31 // 0xFF AB32 // 0xFF AB33 // 0xFF AB34 // 0xFF AB35 // 0xFF AB36 // 0xFF AB37 // 0xFF AB38 // 0xFF AB39 // 0xFF AB3A // 0xFF AB3B // 0xFF AB3C // 0xFF AB3D // 0xFF AB3E // 0xFF AB3F // 0xFF AB40 // 0xFF AB41 // 0xFF AB42 // 0xFF AB43 // 0xFF AB44 // 0xFF AB45 // 0xFF AB46 // 0xFF AB47 // 0xFF AB48 // 0xFF AB49 // 0xFF AB4A // 0xFF AB4B // 0xFF AB4C // 0xFF AB4D // 0xFF AB4E // 0xFF AB4F // 0xFF AB50 // 0xFF AB51 // 0xFF AB52 // 0xFF AB53 // 0xFF AB54 // 0xFF AB55 // 0xFF AB56 // 0xFF AB57 // 0xFF AB58 // 0xFF AB59 // 0xFF AB5A // 0xFF AB5B // 0xFF AB5C // 0xFF AB5D // 0xFF AB5E // 0xFF AB5F // 0xFF AB60 // 0xFF AB61 // 0xFF AB62 // 0xFF AB63 // 0xFF AB64 // 0xFF AB65 // 0xFF AB66 // 0xFF AB67 // 0xFF AB68 // 0xFF AB69 // 0xFF AB6A // 0xFF AB6B // 0xFF AB6C // 0xFF AB6D // 0xFF AB6E // 0xFF AB6F // 0xFF AB70 // 0xFF AB71 // 0xFF AB72 // 0xFF AB73 // 0xFF AB74 // 0xFF AB75 // 0xFF AB76 // 0xFF AB77 // 0xFF AB78 // 0xFF AB79 // 0xFF AB7A // 0xFF AB7B // 0xFF AB7C // 0xFF AB7D // 0xFF AB7E // 0xFF AB7F // 0xFF AB80 // 0xFF AB81 // 0xFF AB82 // 0xFF AB83 // 0xFF AB84 // 0xFF AB85 // 0xFF AB86 // 0xFF AB87 // 0xFF AB88 // 0xFF AB89 // 0xFF AB8A // 0xFF AB8B // 0xFF AB8C // 0xFF AB8D // 0xFF AB8E // 0xFF AB8F // 0xFF AB90 // 0xFF AB91 // 0xFF AB92 // 0xFF AB93 // 0xFF AB94 // 0xFF AB95 // 0xFF AB96 // 0xFF AB97 // 0xFF AB98 // 0xFF AB99 // 0xFF AB9A // 0xFF AB9B // 0xFF AB9C // 0xFF AB9D // 0xFF AB9E // 0xFF AB9F // 0xFF ABA0 // 0xFF ABA1 // 0xFF ABA2 // 0xFF ABA3 // 0xFF ABA4 // 0xFF ABA5 // 0xFF ABA6 // 0xFF ABA7 // 0xFF ABA8 // 0xFF ABA9 // 0xFF ABAA // 0xFF ABAB // 0xFF ABAC // 0xFF ABAD // 0xFF ABAE // 0xFF ABAF // 0xFF ABB0 // 0xFF ABB1 // 0xFF ABB2 // 0xFF ABB3 // 0xFF ABB4 // 0xFF ABB5 // 0xFF ABB6 // 0xFF ABB7 // 0xFF ABB8 // 0xFF ABB9 // 0xFF ABBA // 0xFF ABBB // 0xFF ABBC // 0xFF ABBD // 0xFF ABBE // 0xFF ABBF // 0xFF ABC0 // 0xFF ABC1 // 0xFF ABC2 // 0xFF ABC3 // 0xFF ABC4 // 0xFF ABC5 // 0xFF ABC6 // 0xFF ABC7 // 0xFF ABC8 // 0xFF ABC9 // 0xFF ABCA // 0xFF ABCB // 0xFF ABCC // 0xFF ABCD // 0xFF ABCE // 0xFF ABCF // 0xFF ABD0 // 0xFF ABD1 // 0xFF ABD2 // 0xFF ABD3 // 0xFF ABD4 // 0xFF ABD5 // 0xFF ABD6 // 0xFF ABD7 // 0xFF ABD8 // 0xFF ABD9 // 0xFF ABDA // 0xFF ABDB // 0xFF ABDC // 0xFF ABDD // 0xFF ABDE // 0xFF ABDF // 0xFF ABE0 // 0xFF ABE1 // 0xFF ABE2 // 0xFF ABE3 // 0xFF ABE4 // 0xFF ABE5 // 0xFF ABE6 // 0xFF ABE7 // 0xFF ABE8 // 0xFF ABE9 // 0xFF ABEA // 0xFF ABEB // 0xFF ABEC // 0xFF ABED // 0xFF ABEE // 0xFF ABEF // 0xFF ABF0 // 0xFF ABF1 // 0xFF ABF2 // 0xFF ABF3 // 0xFF ABF4 // 0xFF ABF5 // 0xFF ABF6 // 0xFF ABF7 // 0xFF ABF8 // 0xFF ABF9 // 0xFF ABFA // 0xFF ABFB // 0xFF ABFC // 0xFF ABFD // 0xFF ABFE // 0xFF ABFF // 0xFF AC00 // 0xFF AC01 // 0xFF AC02 // 0xFF AC03 // 0xFF AC04 // 0xFF AC05 // 0xFF AC06 // 0xFF AC07 // 0xFF AC08 // 0xFF AC09 // 0xFF AC0A // 0xFF AC0B // 0xFF AC0C // 0xFF AC0D // 0xFF AC0E // 0xFF AC0F // 0xFF AC10 // 0xFF AC11 // 0xFF AC12 // 0xFF AC13 // 0xFF AC14 // 0xFF AC15 // 0xFF AC16 // 0xFF AC17 // 0xFF AC18 // 0xFF AC19 // 0xFF AC1A // 0xFF AC1B // 0xFF AC1C // 0xFF AC1D // 0xFF AC1E // 0xFF AC1F // 0xFF AC20 // 0xFF AC21 // 0xFF AC22 // 0xFF AC23 // 0xFF AC24 // 0xFF AC25 // 0xFF AC26 // 0xFF AC27 // 0xFF AC28 // 0xFF AC29 // 0xFF AC2A // 0xFF AC2B // 0xFF AC2C // 0xFF AC2D // 0xFF AC2E // 0xFF AC2F // 0xFF AC30 // 0xFF AC31 // 0xFF AC32 // 0xFF AC33 // 0xFF AC34 // 0xFF AC35 // 0xFF AC36 // 0xFF AC37 // 0xFF AC38 // 0xFF AC39 // 0xFF AC3A // 0xFF AC3B // 0xFF AC3C // 0xFF AC3D // 0xFF AC3E // 0xFF AC3F // 0xFF AC40 // 0xFF AC41 // 0xFF AC42 // 0xFF AC43 // 0xFF AC44 // 0xFF AC45 // 0xFF AC46 // 0xFF AC47 // 0xFF AC48 // 0xFF AC49 // 0xFF AC4A // 0xFF AC4B // 0xFF AC4C // 0xFF AC4D // 0xFF AC4E // 0xFF AC4F // 0xFF AC50 // 0xFF AC51 // 0xFF AC52 // 0xFF AC53 // 0xFF AC54 // 0xFF AC55 // 0xFF AC56 // 0xFF AC57 // 0xFF AC58 // 0xFF AC59 // 0xFF AC5A // 0xFF AC5B // 0xFF AC5C // 0xFF AC5D // 0xFF AC5E // 0xFF AC5F // 0xFF AC60 // 0xFF AC61 // 0xFF AC62 // 0xFF AC63 // 0xFF AC64 // 0xFF AC65 // 0xFF AC66 // 0xFF AC67 // 0xFF AC68 // 0xFF AC69 // 0xFF AC6A // 0xFF AC6B // 0xFF AC6C // 0xFF AC6D // 0xFF AC6E // 0xFF AC6F // 0xFF AC70 // 0xFF AC71 // 0xFF AC72 // 0xFF AC73 // 0xFF AC74 // 0xFF AC75 // 0xFF AC76 // 0xFF AC77 // 0xFF AC78 // 0xFF AC79 // 0xFF AC7A // 0xFF AC7B // 0xFF AC7C // 0xFF AC7D // 0xFF AC7E // 0xFF AC7F // 0xFF AC80 // 0xFF AC81 // 0xFF AC82 // 0xFF AC83 // 0xFF AC84 // 0xFF AC85 // 0xFF AC86 // 0xFF AC87 // 0xFF AC88 // 0xFF AC89 // 0xFF AC8A // 0xFF AC8B // 0xFF AC8C // 0xFF AC8D // 0xFF AC8E // 0xFF AC8F // 0xFF AC90 // 0xFF AC91 // 0xFF AC92 // 0xFF AC93 // 0xFF AC94 // 0xFF AC95 // 0xFF AC96 // 0xFF AC97 // 0xFF AC98 // 0xFF AC99 // 0xFF AC9A // 0xFF AC9B // 0xFF AC9C // 0xFF AC9D // 0xFF AC9E // 0xFF AC9F // 0xFF ACA0 // 0xFF ACA1 // 0xFF ACA2 // 0xFF ACA3 // 0xFF ACA4 // 0xFF ACA5 // 0xFF ACA6 // 0xFF ACA7 // 0xFF ACA8 // 0xFF ACA9 // 0xFF ACAA // 0xFF ACAB // 0xFF ACAC // 0xFF ACAD // 0xFF ACAE // 0xFF ACAF // 0xFF ACB0 // 0xFF ACB1 // 0xFF ACB2 // 0xFF ACB3 // 0xFF ACB4 // 0xFF ACB5 // 0xFF ACB6 // 0xFF ACB7 // 0xFF ACB8 // 0xFF ACB9 // 0xFF ACBA // 0xFF ACBB // 0xFF ACBC // 0xFF ACBD // 0xFF ACBE // 0xFF ACBF // 0xFF ACC0 // 0xFF ACC1 // 0xFF ACC2 // 0xFF ACC3 // 0xFF ACC4 // 0xFF ACC5 // 0xFF ACC6 // 0xFF ACC7 // 0xFF ACC8 // 0xFF ACC9 // 0xFF ACCA // 0xFF ACCB // 0xFF ACCC // 0xFF ACCD // 0xFF ACCE // 0xFF ACCF // 0xFF ACD0 // 0xFF ACD1 // 0xFF ACD2 // 0xFF ACD3 // 0xFF ACD4 // 0xFF ACD5 // 0xFF ACD6 // 0xFF ACD7 // 0xFF ACD8 // 0xFF ACD9 // 0xFF ACDA // 0xFF ACDB // 0xFF ACDC // 0xFF ACDD // 0xFF ACDE // 0xFF ACDF // 0xFF ACE0 // 0xFF ACE1 // 0xFF ACE2 // 0xFF ACE3 // 0xFF ACE4 // 0xFF ACE5 // 0xFF ACE6 // 0xFF ACE7 // 0xFF ACE8 // 0xFF ACE9 // 0xFF ACEA // 0xFF ACEB // 0xFF ACEC // 0xFF ACED // 0xFF ACEE // 0xFF ACEF // 0xFF ACF0 // 0xFF ACF1 // 0xFF ACF2 // 0xFF ACF3 // 0xFF ACF4 // 0xFF ACF5 // 0xFF ACF6 // 0xFF ACF7 // 0xFF ACF8 // 0xFF ACF9 // 0xFF ACFA // 0xFF ACFB // 0xFF ACFC // 0xFF ACFD // 0xFF ACFE // 0xFF ACFF // 0xFF AD00 // 0xFF AD01 // 0xFF AD02 // 0xFF AD03 // 0xFF AD04 // 0xFF AD05 // 0xFF AD06 // 0xFF AD07 // 0xFF AD08 // 0xFF AD09 // 0xFF AD0A // 0xFF AD0B // 0xFF AD0C // 0xFF AD0D // 0xFF AD0E // 0xFF AD0F // 0xFF AD10 // 0xFF AD11 // 0xFF AD12 // 0xFF AD13 // 0xFF AD14 // 0xFF AD15 // 0xFF AD16 // 0xFF AD17 // 0xFF AD18 // 0xFF AD19 // 0xFF AD1A // 0xFF AD1B // 0xFF AD1C // 0xFF AD1D // 0xFF AD1E // 0xFF AD1F // 0xFF AD20 // 0xFF AD21 // 0xFF AD22 // 0xFF AD23 // 0xFF AD24 // 0xFF AD25 // 0xFF AD26 // 0xFF AD27 // 0xFF AD28 // 0xFF AD29 // 0xFF AD2A // 0xFF AD2B // 0xFF AD2C // 0xFF AD2D // 0xFF AD2E // 0xFF AD2F // 0xFF AD30 // 0xFF AD31 // 0xFF AD32 // 0xFF AD33 // 0xFF AD34 // 0xFF AD35 // 0xFF AD36 // 0xFF AD37 // 0xFF AD38 // 0xFF AD39 // 0xFF AD3A // 0xFF AD3B // 0xFF AD3C // 0xFF AD3D // 0xFF AD3E // 0xFF AD3F // 0xFF AD40 // 0xFF AD41 // 0xFF AD42 // 0xFF AD43 // 0xFF AD44 // 0xFF AD45 // 0xFF AD46 // 0xFF AD47 // 0xFF AD48 // 0xFF AD49 // 0xFF AD4A // 0xFF AD4B // 0xFF AD4C // 0xFF AD4D // 0xFF AD4E // 0xFF AD4F // 0xFF AD50 // 0xFF AD51 // 0xFF AD52 // 0xFF AD53 // 0xFF AD54 // 0xFF AD55 // 0xFF AD56 // 0xFF AD57 // 0xFF AD58 // 0xFF AD59 // 0xFF AD5A // 0xFF AD5B // 0xFF AD5C // 0xFF AD5D // 0xFF AD5E // 0xFF AD5F // 0xFF AD60 // 0xFF AD61 // 0xFF AD62 // 0xFF AD63 // 0xFF AD64 // 0xFF AD65 // 0xFF AD66 // 0xFF AD67 // 0xFF AD68 // 0xFF AD69 // 0xFF AD6A // 0xFF AD6B // 0xFF AD6C // 0xFF AD6D // 0xFF AD6E // 0xFF AD6F // 0xFF AD70 // 0xFF AD71 // 0xFF AD72 // 0xFF AD73 // 0xFF AD74 // 0xFF AD75 // 0xFF AD76 // 0xFF AD77 // 0xFF AD78 // 0xFF AD79 // 0xFF AD7A // 0xFF AD7B // 0xFF AD7C // 0xFF AD7D // 0xFF AD7E // 0xFF AD7F // 0xFF AD80 // 0xFF AD81 // 0xFF AD82 // 0xFF AD83 // 0xFF AD84 // 0xFF AD85 // 0xFF AD86 // 0xFF AD87 // 0xFF AD88 // 0xFF AD89 // 0xFF AD8A // 0xFF AD8B // 0xFF AD8C // 0xFF AD8D // 0xFF AD8E // 0xFF AD8F // 0xFF AD90 // 0xFF AD91 // 0xFF AD92 // 0xFF AD93 // 0xFF AD94 // 0xFF AD95 // 0xFF AD96 // 0xFF AD97 // 0xFF AD98 // 0xFF AD99 // 0xFF AD9A // 0xFF AD9B // 0xFF AD9C // 0xFF AD9D // 0xFF AD9E // 0xFF AD9F // 0xFF ADA0 // 0xFF ADA1 // 0xFF ADA2 // 0xFF ADA3 // 0xFF ADA4 // 0xFF ADA5 // 0xFF ADA6 // 0xFF ADA7 // 0xFF ADA8 // 0xFF ADA9 // 0xFF ADAA // 0xFF ADAB // 0xFF ADAC // 0xFF ADAD // 0xFF ADAE // 0xFF ADAF // 0xFF ADB0 // 0xFF ADB1 // 0xFF ADB2 // 0xFF ADB3 // 0xFF ADB4 // 0xFF ADB5 // 0xFF ADB6 // 0xFF ADB7 // 0xFF ADB8 // 0xFF ADB9 // 0xFF ADBA // 0xFF ADBB // 0xFF ADBC // 0xFF ADBD // 0xFF ADBE // 0xFF ADBF // 0xFF ADC0 // 0xFF ADC1 // 0xFF ADC2 // 0xFF ADC3 // 0xFF ADC4 // 0xFF ADC5 // 0xFF ADC6 // 0xFF ADC7 // 0xFF ADC8 // 0xFF ADC9 // 0xFF ADCA // 0xFF ADCB // 0xFF ADCC // 0xFF ADCD // 0xFF ADCE // 0xFF ADCF // 0xFF ADD0 // 0xFF ADD1 // 0xFF ADD2 // 0xFF ADD3 // 0xFF ADD4 // 0xFF ADD5 // 0xFF ADD6 // 0xFF ADD7 // 0xFF ADD8 // 0xFF ADD9 // 0xFF ADDA // 0xFF ADDB // 0xFF ADDC // 0xFF ADDD // 0xFF ADDE // 0xFF ADDF // 0xFF ADE0 // 0xFF ADE1 // 0xFF ADE2 // 0xFF ADE3 // 0xFF ADE4 // 0xFF ADE5 // 0xFF ADE6 // 0xFF ADE7 // 0xFF ADE8 // 0xFF ADE9 // 0xFF ADEA // 0xFF ADEB // 0xFF ADEC // 0xFF ADED // 0xFF ADEE // 0xFF ADEF // 0xFF ADF0 // 0xFF ADF1 // 0xFF ADF2 // 0xFF ADF3 // 0xFF ADF4 // 0xFF ADF5 // 0xFF ADF6 // 0xFF ADF7 // 0xFF ADF8 // 0xFF ADF9 // 0xFF ADFA // 0xFF ADFB // 0xFF ADFC // 0xFF ADFD // 0xFF ADFE // 0xFF ADFF // 0xFF AE00 // 0xFF AE01 // 0xFF AE02 // 0xFF AE03 // 0xFF AE04 // 0xFF AE05 // 0xFF AE06 // 0xFF AE07 // 0xFF AE08 // 0xFF AE09 // 0xFF AE0A // 0xFF AE0B // 0xFF AE0C // 0xFF AE0D // 0xFF AE0E // 0xFF AE0F // 0xFF AE10 // 0xFF AE11 // 0xFF AE12 // 0xFF AE13 // 0xFF AE14 // 0xFF AE15 // 0xFF AE16 // 0xFF AE17 // 0xFF AE18 // 0xFF AE19 // 0xFF AE1A // 0xFF AE1B // 0xFF AE1C // 0xFF AE1D // 0xFF AE1E // 0xFF AE1F // 0xFF AE20 // 0xFF AE21 // 0xFF AE22 // 0xFF AE23 // 0xFF AE24 // 0xFF AE25 // 0xFF AE26 // 0xFF AE27 // 0xFF AE28 // 0xFF AE29 // 0xFF AE2A // 0xFF AE2B // 0xFF AE2C // 0xFF AE2D // 0xFF AE2E // 0xFF AE2F // 0xFF AE30 // 0xFF AE31 // 0xFF AE32 // 0xFF AE33 // 0xFF AE34 // 0xFF AE35 // 0xFF AE36 // 0xFF AE37 // 0xFF AE38 // 0xFF AE39 // 0xFF AE3A // 0xFF AE3B // 0xFF AE3C // 0xFF AE3D // 0xFF AE3E // 0xFF AE3F // 0xFF AE40 // 0xFF AE41 // 0xFF AE42 // 0xFF AE43 // 0xFF AE44 // 0xFF AE45 // 0xFF AE46 // 0xFF AE47 // 0xFF AE48 // 0xFF AE49 // 0xFF AE4A // 0xFF AE4B // 0xFF AE4C // 0xFF AE4D // 0xFF AE4E // 0xFF AE4F // 0xFF AE50 // 0xFF AE51 // 0xFF AE52 // 0xFF AE53 // 0xFF AE54 // 0xFF AE55 // 0xFF AE56 // 0xFF AE57 // 0xFF AE58 // 0xFF AE59 // 0xFF AE5A // 0xFF AE5B // 0xFF AE5C // 0xFF AE5D // 0xFF AE5E // 0xFF AE5F // 0xFF AE60 // 0xFF AE61 // 0xFF AE62 // 0xFF AE63 // 0xFF AE64 // 0xFF AE65 // 0xFF AE66 // 0xFF AE67 // 0xFF AE68 // 0xFF AE69 // 0xFF AE6A // 0xFF AE6B // 0xFF AE6C // 0xFF AE6D // 0xFF AE6E // 0xFF AE6F // 0xFF AE70 // 0xFF AE71 // 0xFF AE72 // 0xFF AE73 // 0xFF AE74 // 0xFF AE75 // 0xFF AE76 // 0xFF AE77 // 0xFF AE78 // 0xFF AE79 // 0xFF AE7A // 0xFF AE7B // 0xFF AE7C // 0xFF AE7D // 0xFF AE7E // 0xFF AE7F // 0xFF AE80 // 0xFF AE81 // 0xFF AE82 // 0xFF AE83 // 0xFF AE84 // 0xFF AE85 // 0xFF AE86 // 0xFF AE87 // 0xFF AE88 // 0xFF AE89 // 0xFF AE8A // 0xFF AE8B // 0xFF AE8C // 0xFF AE8D // 0xFF AE8E // 0xFF AE8F // 0xFF AE90 // 0xFF AE91 // 0xFF AE92 // 0xFF AE93 // 0xFF AE94 // 0xFF AE95 // 0xFF AE96 // 0xFF AE97 // 0xFF AE98 // 0xFF AE99 // 0xFF AE9A // 0xFF AE9B // 0xFF AE9C // 0xFF AE9D // 0xFF AE9E // 0xFF AE9F // 0xFF AEA0 // 0xFF AEA1 // 0xFF AEA2 // 0xFF AEA3 // 0xFF AEA4 // 0xFF AEA5 // 0xFF AEA6 // 0xFF AEA7 // 0xFF AEA8 // 0xFF AEA9 // 0xFF AEAA // 0xFF AEAB // 0xFF AEAC // 0xFF AEAD // 0xFF AEAE // 0xFF AEAF // 0xFF AEB0 // 0xFF AEB1 // 0xFF AEB2 // 0xFF AEB3 // 0xFF AEB4 // 0xFF AEB5 // 0xFF AEB6 // 0xFF AEB7 // 0xFF AEB8 // 0xFF AEB9 // 0xFF AEBA // 0xFF AEBB // 0xFF AEBC // 0xFF AEBD // 0xFF AEBE // 0xFF AEBF // 0xFF AEC0 // 0xFF AEC1 // 0xFF AEC2 // 0xFF AEC3 // 0xFF AEC4 // 0xFF AEC5 // 0xFF AEC6 // 0xFF AEC7 // 0xFF AEC8 // 0xFF AEC9 // 0xFF AECA // 0xFF AECB // 0xFF AECC // 0xFF AECD // 0xFF AECE // 0xFF AECF // 0xFF AED0 // 0xFF AED1 // 0xFF AED2 // 0xFF AED3 // 0xFF AED4 // 0xFF AED5 // 0xFF AED6 // 0xFF AED7 // 0xFF AED8 // 0xFF AED9 // 0xFF AEDA // 0xFF AEDB // 0xFF AEDC // 0xFF AEDD // 0xFF AEDE // 0xFF AEDF // 0xFF AEE0 // 0xFF AEE1 // 0xFF AEE2 // 0xFF AEE3 // 0xFF AEE4 // 0xFF AEE5 // 0xFF AEE6 // 0xFF AEE7 // 0xFF AEE8 // 0xFF AEE9 // 0xFF AEEA // 0xFF AEEB // 0xFF AEEC // 0xFF AEED // 0xFF AEEE // 0xFF AEEF // 0xFF AEF0 // 0xFF AEF1 // 0xFF AEF2 // 0xFF AEF3 // 0xFF AEF4 // 0xFF AEF5 // 0xFF AEF6 // 0xFF AEF7 // 0xFF AEF8 // 0xFF AEF9 // 0xFF AEFA // 0xFF AEFB // 0xFF AEFC // 0xFF AEFD // 0xFF AEFE // 0xFF AEFF // 0xFF AF00 // 0x0D AF01 // 'D' AF02 // 'I' AF03 // 'S' AF04 // 'K' AF05 // ' ' AF06 // 'F' AF07 // 'A' AF08 // 'U' AF09 // 'L' AF0A // 'T' AF0B // 0x0D AF0C // 'N' AF0D // 'O' AF0E // 'T' AF0F // ' ' AF10 // 'R' AF11 // 'E' AF12 // 'A' AF13 // 'D' AF14 // 'Y' AF15 // 0x0D AF16 // 'N' AF17 // 'O' AF18 // 'T' AF19 // ' ' AF1A // 'F' AF1B // 'O' AF1C // 'U' AF1D // 'N' AF1E // 'D' AF1F // 0x0D AF20 // 'N' AF21 // 'O' AF22 // ' ' AF23 // 'P' AF24 // 'A' AF25 // 'T' AF26 // 'H' AF27 // 0x0D AF28 // 'N' AF29 // 'O' AF2A // 'T' AF2B // ' ' AF2C // 'O' AF2D // 'P' AF2E // 'E' AF2F // 'N' AF30 // 0x0D AF31 // 'N' AF32 // 'O' AF33 // ' ' AF34 // 'C' AF35 // 'A' AF36 // 'R' AF37 // 'D' AF38 // 0x0D AF39 // 'N' AF3A // 'O' AF3B // ' ' AF3C // 'F' AF3D // 'I' AF3E // 'L' AF3F // 'E' AF40 // 'S' AF41 // 'Y' AF42 // 'S' AF43 // 'T' AF44 // 'E' AF45 // 'M' AF46 // 0x0D AF47 // 'E' AF48 // 'E' AF49 // 'P' AF4A // 'R' AF4B // 'O' AF4C // 'M' AF4D // ' ' AF4E // 'E' AF4F // 'R' AF50 // 'R' AF51 // 'O' AF52 // 'R' AF53 // 0x0D AF54 // 'F' AF55 // 'A' AF56 // 'I' AF57 // 'L' AF58 // 'E' AF59 // 'D' AF5A // 0x0D AF5B // 'N' AF5C // 'O' AF5D // 'T' AF5E // ' ' AF5F // 'N' AF60 // 'O' AF61 // 'W' AF62 // 0x0D AF63 // 'S' AF64 // 'I' AF65 // 'L' AF66 // 'L' AF67 // 'Y' AF68 // 0x0D AF69 // '@' AF6A // '=' AF6B // '8' AF6C // ';' AF6D // 'P' AF6E // '.' AF6F // '$' AF70 // '6' AF71 // '$' AF72 // '7' AF73 // ''' AF74 // '"' AF75 // 'E' AF76 // 'R' AF77 // 'R' AF78 // 'O' AF79 // 'R' AF7A // ':' AF7B // ' ' AF7C // '"' AF7D // '$' AF7E // '!' AF7F // '#' AF80 // 'D' AF81 // '5' AF82 // '&' AF83 // '#' AF84 // 'F' AF85 // 'F' AF86 // 'F' AF87 // 'F' AF88 // ';' AF89 // 'I' AF8A // 'F' AF8B // '?' AF8C // '1' AF8D // '|' AF8E // '?' AF8F // '2' AF90 // 'P' AF91 // '.' AF92 // '"' AF93 // ' ' AF94 // 'L' AF95 // 'I' AF96 // 'N' AF97 // 'E' AF98 // ' ' AF99 // '"' AF9A // '!' AF9B // '1' AF9C // '&' AF9D // ' ' AF9E // '#' AF9F // 'F' AFA0 // 'F' AFA1 // 'F' AFA2 // 'F' AFA3 // 0x0D AFA4 // 0x00 AFA5 // 0x00 AFA6 // 'P' AFA7 // '.' AFA8 // ''' AFA9 // ';' AFAA // 'E' AFAB // '.' AFAC // 0x0D AFAD // 0xFF AFAE // 0xFF AFAF // 0xFF AFB0 // 0xFF AFB1 // 0xFF AFB2 // 0xFF AFB3 // 0xFF AFB4 // 0xFF AFB5 // 0xFF AFB6 // 0xFF AFB7 // 0xFF AFB8 // 0xFF AFB9 // 0xFF AFBA // 0xFF AFBB // 0xFF AFBC // 0xFF AFBD // 0xFF AFBE // 0xFF AFBF // 0xFF AFC0 // 0xFF AFC1 // 0xFF AFC2 // 0xFF AFC3 // 0xFF AFC4 // 0xFF AFC5 // 0xFF AFC6 // 0xFF AFC7 // 0xFF AFC8 // 0xFF AFC9 // 0xFF AFCA // 0xFF AFCB // 0xFF AFCC // 'L' AFCD // '|' AFCE // 0xA0 AFCF // 0xFF AFD0 // 'A' AFD1 // 'T' AFD2 // 'O' AFD3 // 'M' AFD4 // 'M' AFD5 // 'C' AFD6 // '2' AFD7 // ' ' AFD8 // 'V' AFD9 // '1' AFDA // '.' AFDB // '1' AFDC // '.' AFDD // '4' AFDE // 0x0D AFDF // 0x0A AFE0 // ' ' AFE1 // '(' AFE2 // 'C' AFE3 // ')' AFE4 // ' ' AFE5 // '2' AFE6 // '0' AFE7 // '0' AFE8 // '8' AFE9 // '-' AFEA // '2' AFEB // '0' AFEC // '1' AFED // '0' AFEE // ' ' AFEF // ' ' AFF0 // 'C' AFF1 // 'H' AFF2 // 'A' AFF3 // 'R' AFF4 // 'L' AFF5 // 'I' AFF6 // 'E' AFF7 // ' ' AFF8 // 'R' AFF9 // 'O' AFFA // 'B' AFFB // 'S' AFFC // 'O' AFFD // 'N' AFFE // '.' AFFF // ' ' #endif