sources-request@mirror.UUCP (03/13/87)
Submitted by: pyrnj!vu-vlsi!colin (Colin Kelley) Mod.sources: Volume 9, Issue 25 Archive-name: zmac/Part02 #! /bin/sh # This is a shell archive, meaning: # 1. Remove everything above the #! /bin/sh line. # 2. Save the resulting text in a file. # 3. Execute the file with /bin/sh (not csh) to create the files: # zdis.c serial.z serial.hex export PATH; PATH=/bin:$PATH echo shar: extracting "'zdis.c'" '(37358 characters)' if test -f 'zdis.c' then echo shar: will not over-write existing file "'zdis.c'" else cat << \SHAR_EOF > 'zdis.c' char undefined[] = "undefined"; struct opcode { char *name; int args; }; struct opcode major[256] = { "nop", 0, /* 00 */ "ld bc,%02x%02xh", 2, /* 01 */ "ld bc,a", 0, /* 02 */ "inc bc", 0, /* 03 */ "inc b", 0, /* 04 */ "dec b", 0, /* 05 */ "ld b,%02xh", 1, /* 06 */ "rlc a", 0, /* 07 */ "ex af,af'", 0, /* 08 */ "add hl,bc", 0, /* 09 */ "ld a,(bc)", 0, /* 0a */ "dec bc", 0, /* 0b */ "inc c", 0, /* 0c */ "dec c", 0, /* 0d */ "ld c,%02xh", 1, /* 0e */ "rrc a", 0, /* 0f */ "djnz %02xh", 1, /* 10 */ "ld de,%02x%02xh", 2, /* 11 */ "ld (de),a", 0, /* 12 */ "inc de", 0, /* 13 */ "inc d", 0, /* 14 */ "dec d", 0, /* 15 */ "ld d,%02xh", 1, /* 16 */ "rla", 0, /* 17 */ "jr %02xh", 1, /* 18 */ "add hl,de", 0, /* 19 */ "ld a,(de)", 0, /* 1a */ "dec de", 0, /* 1b */ "inc e", 0, /* 1c */ "dec e", 0, /* 1d */ "ld e,%02xh", 1, /* 1e */ "rra", 0, /* 1f */ "jr nz,%02xh", 1, /* 20 */ "ld hl,%02x%02xh", 2, /* 21 */ "ld (%02x%02xh),hl",2, /* 22 */ "inc hl", 0, /* 23 */ "inc h", 0, /* 24 */ "dec h", 0, /* 25 */ "ld h,%02xh", 1, /* 26 */ "daa", 0, /* 27 */ "jr z,%02xh", 1, /* 28 */ "add hl,hl", 0, /* 29 */ "ld hl,(%02x%02xh)",2, /* 2a */ "dec hl", 0, /* 2b */ "inc l", 0, /* 2c */ "dec l", 0, /* 2d */ "ld l,%02xh", 1, /* 2e */ "cpl", 0, /* 2f */ "jr nc,%02xh", 1, /* 30 */ "ld sp,%02x%02xh", 2, /* 31 */ "ld (%02x%02xh),a", 2, /* 32 */ "inc sp", 0, /* 33 */ "inc (hl)", 0, /* 34 */ "dec (hl)", 0, /* 35 */ "ld (hl),%02xh", 1, /* 36 */ "scf", 0, /* 37 */ "jr c,%02xh", 1, /* 38 */ "add hl,sp", 0, /* 39 */ "ld a,(%02x%02xh)", 2, /* 3a */ "dec sp", 0, /* 3b */ "inc a", 0, /* 3c */ "dec a", 0, /* 3d */ "ld a,%02xh", 1, /* 3e */ "ccf", 0, /* 3f */ "ld b,b", 0, /* 40 */ "ld b,c", 0, /* 41 */ "ld b,d", 0, /* 42 */ "ld b,e", 0, /* 43 */ "ld b,h", 0, /* 44 */ "ld b,l", 0, /* 45 */ "ld b,(hl)", 0, /* 46 */ "ld b,a", 0, /* 47 */ "ld c,b", 0, /* 48 */ "ld c,c", 0, /* 49 */ "ld c,d", 0, /* 4a */ "ld c,e", 0, /* 4b */ "ld c,h", 0, /* 4c */ "ld c,l", 0, /* 4d */ "ld c,(hl)", 0, /* 4e */ "ld c,a", 0, /* 4f */ "ld d,b", 0, /* 50 */ "ld d,c", 0, /* 51 */ "ld d,d", 0, /* 52 */ "ld d,e", 0, /* 53 */ "ld d,h", 0, /* 54 */ "ld d,l", 0, /* 55 */ "ld d,(hl)", 0, /* 56 */ "ld d,a", 0, /* 57 */ "ld e,b", 0, /* 58 */ "ld e,c", 0, /* 59 */ "ld e,d", 0, /* 5a */ "ld e,e", 0, /* 5b */ "ld e,h", 0, /* 5c */ "ld e,l", 0, /* 5d */ "ld e,(hl)", 0, /* 5e */ "ld e,a", 0, /* 5f */ "ld h,b", 0, /* 60 */ "ld h,c", 0, /* 61 */ "ld h,d", 0, /* 62 */ "ld h,e", 0, /* 63 */ "ld h,h", 0, /* 64 */ "ld h,l", 0, /* 65 */ "ld h,(hl)", 0, /* 66 */ "ld h,a", 0, /* 67 */ "ld l,b", 0, /* 68 */ "ld l,c", 0, /* 69 */ "ld l,d", 0, /* 6a */ "ld l,e", 0, /* 6b */ "ld l,h", 0, /* 6c */ "ld l,l", 0, /* 6d */ "ld l,(hl)", 0, /* 6e */ "ld l,a", 0, /* 6f */ "ld (hl),b", 0, /* 70 */ "ld (hl),c", 0, /* 71 */ "ld (hl),d", 0, /* 72 */ "ld (hl),e", 0, /* 73 */ "ld (hl),h", 0, /* 74 */ "ld (hl),l", 0, /* 75 */ "halt", 0, /* 76 */ "ld (hl),a", 0, /* 77 */ "ld a,b", 0, /* 78 */ "ld a,c", 0, /* 79 */ "ld a,d", 0, /* 7a */ "ld a,e", 0, /* 7b */ "ld a,h", 0, /* 7c */ "ld a,l", 0, /* 7d */ "ld a,(hl)", 0, /* 7e */ "ld a,a", 0, /* 7f */ "add a,b", 0, /* 80 */ "add a,c", 0, /* 81 */ "add a,d", 0, /* 82 */ "add a,e", 0, /* 83 */ "add a,h", 0, /* 84 */ "add a,l", 0, /* 85 */ "add a,(hl)", 0, /* 86 */ "add a,a", 0, /* 87 */ "adc a,b", 0, /* 88 */ "adc a,c", 0, /* 89 */ "adc a,d", 0, /* 8a */ "adc a,e", 0, /* 8b */ "adc a,h", 0, /* 8c */ "adc a,l", 0, /* 8d */ "adc a,(hl)", 0, /* 8e */ "adc a,a", 0, /* 8f */ "sub b", 0, /* 90 */ "sub c", 0, /* 91 */ "sub d", 0, /* 92 */ "sub e", 0, /* 93 */ "sub h", 0, /* 94 */ "sub l", 0, /* 95 */ "sub (hl)", 0, /* 96 */ "sub a", 0, /* 97 */ "sbc a,b", 0, /* 98 */ "sbc a,c", 0, /* 99 */ "sbc a,d", 0, /* 9a */ "sbc a,e", 0, /* 9b */ "sbc a,h", 0, /* 9c */ "sbc a,l", 0, /* 9d */ "sbc a,(hl)", 0, /* 9e */ "sbc a,a", 0, /* 9f */ "and b", 0, /* a0 */ "and c", 0, /* a1 */ "and d", 0, /* a2 */ "and e", 0, /* a3 */ "and h", 0, /* a4 */ "and l", 0, /* a5 */ "and (hl)", 0, /* a6 */ "and a", 0, /* a7 */ "xor b", 0, /* a8 */ "xor c", 0, /* a9 */ "xor d", 0, /* aa */ "xor e", 0, /* ab */ "xor h", 0, /* ac */ "xor l", 0, /* ad */ "xor (hl)", 0, /* ae */ "xor a", 0, /* af */ "or b", 0, /* b0 */ "or c", 0, /* b1 */ "or d", 0, /* b2 */ "or e", 0, /* b3 */ "or h", 0, /* b4 */ "or l", 0, /* b5 */ "or (hl)", 0, /* b6 */ "or a", 0, /* b7 */ "cp b", 0, /* b8 */ "cp c", 0, /* b9 */ "cp d", 0, /* ba */ "cp e", 0, /* bb */ "cp h", 0, /* bc */ "cp l", 0, /* bd */ "cp (hl)", 0, /* be */ "cp a", 0, /* bf */ "ret nz", 0, /* c0 */ "pop bc", 0, /* c1 */ "jp nz,%02x%02xh", 2, /* c2 */ "jp %02x%02xh", 2, /* c3 */ "call nz,%02x%02xh", 2, /* c4 */ "push bc", 0, /* c5 */ "add a,%02xh", 1, /* c6 */ "rst 0", 0, /* c7 */ "ret z", 0, /* c8 */ "ret", 0, /* c9 */ "jp z,%02x%02xh", 2, /* ca */ 0, 0, /* cb */ "call z,%02x%02xh", 2, /* cc */ "call %02x%02xh", 2, /* cd */ "adc a,%02xh", 1, /* ce */ "rst 8", 0, /* cf */ "ret nc", 0, /* d0 */ "pop de", 0, /* d1 */ "jp nc,%02x%02xh", 2, /* d2 */ "out (%02xh),a", 1, /* d3 */ "call nc,%02x%02xh", 2, /* d4 */ "push de", 0, /* d5 */ "sub %02xh", 1, /* d6 */ "rst 10h", 0, /* d7 */ "ret c", 0, /* d8 */ "exx", 0, /* d9 */ "jp c,%02x%02xh", 2, /* da */ "in a,(%02xh)", 1, /* db */ "call c,%02x%02xh", 2, /* dc */ 0, 1, /* dd */ "sbc a,%02xh", 1, /* de */ "rst 18h", 0, /* df */ "ret po", 0, /* e0 */ "pop hl", 0, /* e1 */ "jp po,%02x%02xh", 2, /* e2 */ "ex (sp),hl", 0, /* e3 */ "call po,%02x%02xh", 2, /* e4 */ "push hl", 0, /* e5 */ "and %02xh", 1, /* e6 */ "rst 20h", 0, /* e7 */ "ret pe", 0, /* e8 */ "jp (hl)", 0, /* e9 */ "jp pe,%02x%02xh", 2, /* ea */ "ex de,hl", 0, /* eb */ "call pe,%02x%02xh", 2, /* ec */ 0, 2, /* ed */ "xor %02xh", 1, /* ee */ "rst 28h", 0, /* ef */ "ret p", 0, /* f0 */ "pop af", 0, /* f1 */ "jp p,%02x%02xh", 2, /* f2 */ "di", 0, /* f3 */ "call p,%02x%02xh", 2, /* f4 */ "push af", 0, /* f5 */ "or %02xh", 1, /* f6 */ "rst 30h", 0, /* f7 */ "ret m", 0, /* f8 */ "ld sp,hl", 0, /* f9 */ "jp m,%02x%02xh", 2, /* fa */ "ei", 0, /* fb */ "call m,%02x%02xh", 2, /* fc */ 0, 3, /* fd */ "cp %02xh", 1, /* fe */ "rst 38h", 0, /* ff */ }; struct opcode minor[4][256] = { /* cb */ "rlc b", 0, /* cb00 */ "rlc c", 0, /* cb01 */ "rlc d", 0, /* cb02 */ "rlc e", 0, /* cb03 */ "rlc h", 0, /* cb04 */ "rlc l", 0, /* cb05 */ "rlc (hl)", 0, /* cb06 */ "rlc a", 0, /* cb07 */ "rrc b", 0, /* cb08 */ "rrc c", 0, /* cb09 */ "rrc d", 0, /* cb0a */ "rrc e", 0, /* cb0b */ "rrc h", 0, /* cb0c */ "rrc l", 0, /* cb0d */ "rrc (hl)", 0, /* cb0e */ "rrc a", 0, /* cb0f */ "rl b", 0, /* cb10 */ "rl c", 0, /* cb11 */ "rl d", 0, /* cb12 */ "rl e", 0, /* cb13 */ "rl h", 0, /* cb14 */ "rl l", 0, /* cb15 */ "rl (hl)", 0, /* cb16 */ "rl a", 0, /* cb17 */ "rr b", 0, /* cb18 */ "rr c", 0, /* cb19 */ "rr d", 0, /* cb1a */ "rr e", 0, /* cb1b */ "rr h", 0, /* cb1c */ "rr l", 0, /* cb1d */ "rr (hl)", 0, /* cb1e */ "rr a", 0, /* cb1f */ "sla b", 0, /* cb20 */ "sla c", 0, /* cb21 */ "sla d", 0, /* cb22 */ "sla e", 0, /* cb23 */ "sla h", 0, /* cb24 */ "sla l", 0, /* cb25 */ "sla (hl)", 0, /* cb26 */ "sla a", 0, /* cb27 */ "sra b", 0, /* cb28 */ "sra c", 0, /* cb29 */ "sra d", 0, /* cb2a */ "sra e", 0, /* cb2b */ "sra h", 0, /* cb2c */ "sra l", 0, /* cb2d */ "sra (hl)", 0, /* cb2e */ "sra a", 0, /* cb2f */ undefined, 0, /* cb30 */ undefined, 0, /* cb31 */ undefined, 0, /* cb32 */ undefined, 0, /* cb33 */ undefined, 0, /* cb34 */ undefined, 0, /* cb35 */ undefined, 0, /* cb36 */ undefined, 0, /* cb37 */ "srl b", 0, /* cb38 */ "srl c", 0, /* cb39 */ "srl d", 0, /* cb3a */ "srl e", 0, /* cb3b */ "srl h", 0, /* cb3c */ "srl l", 0, /* cb3d */ "srl (hl)", 0, /* cb3e */ "srl a", 0, /* cb3f */ "bit 0,b", 0, /* cb40 */ "bit 0,c", 0, /* cb41 */ "bit 0,d", 0, /* cb42 */ "bit 0,e", 0, /* cb43 */ "bit 0,h", 0, /* cb44 */ "bit 0,l", 0, /* cb45 */ "bit 0,(hl)", 0, /* cb46 */ "bit 0,a", 0, /* cb47 */ "bit 1,b", 0, /* cb48 */ "bit 1,c", 0, /* cb49 */ "bit 1,d", 0, /* cb4a */ "bit 1,e", 0, /* cb4b */ "bit 1,h", 0, /* cb4c */ "bit 1,l", 0, /* cb4d */ "bit 1,(hl)", 0, /* cb4e */ "bit 1,a", 0, /* cb4f */ "bit 2,b", 0, /* cb50 */ "bit 2,c", 0, /* cb51 */ "bit 2,d", 0, /* cb52 */ "bit 2,e", 0, /* cb53 */ "bit 2,h", 0, /* cb54 */ "bit 2,l", 0, /* cb55 */ "bit 2,(hl)", 0, /* cb56 */ "bit 2,a", 0, /* cb57 */ "bit 3,b", 0, /* cb58 */ "bit 3,c", 0, /* cb59 */ "bit 3,d", 0, /* cb5a */ "bit 3,e", 0, /* cb5b */ "bit 3,h", 0, /* cb5c */ "bit 3,l", 0, /* cb5d */ "bit 3,(hl)", 0, /* cb5e */ "bit 3,a", 0, /* cb5f */ "bit 4,b", 0, /* cb60 */ "bit 4,c", 0, /* cb61 */ "bit 4,d", 0, /* cb62 */ "bit 4,e", 0, /* cb63 */ "bit 4,h", 0, /* cb64 */ "bit 4,l", 0, /* cb65 */ "bit 4,(hl)", 0, /* cb66 */ "bit 4,a", 0, /* cb67 */ "bit 5,b", 0, /* cb68 */ "bit 5,c", 0, /* cb69 */ "bit 5,d", 0, /* cb6a */ "bit 5,e", 0, /* cb6b */ "bit 5,h", 0, /* cb6c */ "bit 5,l", 0, /* cb6d */ "bit 5,(hl)", 0, /* cb6e */ "bit 5,a", 0, /* cb6f */ "bit 6,b", 0, /* cb70 */ "bit 6,c", 0, /* cb71 */ "bit 6,d", 0, /* cb72 */ "bit 6,e", 0, /* cb73 */ "bit 6,h", 0, /* cb74 */ "bit 6,l", 0, /* cb75 */ "bit 6,(hl)", 0, /* cb76 */ "bit 6,a", 0, /* cb77 */ "bit 7,b", 0, /* cb78 */ "bit 7,c", 0, /* cb79 */ "bit 7,d", 0, /* cb7a */ "bit 7,e", 0, /* cb7b */ "bit 7,h", 0, /* cb7c */ "bit 7,l", 0, /* cb7d */ "bit 7,(hl)", 0, /* cb7e */ "bit 7,a", 0, /* cb7f */ "res 0,b", 0, /* cb80 */ "res 0,c", 0, /* cb81 */ "res 0,d", 0, /* cb82 */ "res 0,e", 0, /* cb83 */ "res 0,h", 0, /* cb84 */ "res 0,l", 0, /* cb85 */ "res 0,(hl)", 0, /* cb86 */ "res 0,a", 0, /* cb87 */ "res 1,b", 0, /* cb88 */ "res 1,c", 0, /* cb89 */ "res 1,d", 0, /* cb8a */ "res 1,e", 0, /* cb8b */ "res 1,h", 0, /* cb8c */ "res 1,l", 0, /* cb8d */ "res 1,(hl)", 0, /* cb8e */ "res 1,a", 0, /* cb8f */ "res 2,b", 0, /* cb90 */ "res 2,c", 0, /* cb91 */ "res 2,d", 0, /* cb92 */ "res 2,e", 0, /* cb93 */ "res 2,h", 0, /* cb94 */ "res 2,l", 0, /* cb95 */ "res 2,(hl)", 0, /* cb96 */ "res 2,a", 0, /* cb97 */ "res 3,b", 0, /* cb98 */ "res 3,c", 0, /* cb99 */ "res 3,d", 0, /* cb9a */ "res 3,e", 0, /* cb9b */ "res 3,h", 0, /* cb9c */ "res 3,l", 0, /* cb9d */ "res 3,(hl)", 0, /* cb9e */ "res 3,a", 0, /* cb9f */ "res 4,b", 0, /* cba0 */ "res 4,c", 0, /* cba1 */ "res 4,d", 0, /* cba2 */ "res 4,e", 0, /* cba3 */ "res 4,h", 0, /* cba4 */ "res 4,l", 0, /* cba5 */ "res 4,(hl)", 0, /* cba6 */ "res 4,a", 0, /* cba7 */ "res 5,b", 0, /* cba8 */ "res 5,c", 0, /* cba9 */ "res 5,d", 0, /* cbaa */ "res 5,e", 0, /* cbab */ "res 5,h", 0, /* cbac */ "res 5,l", 0, /* cbad */ "res 5,(hl)", 0, /* cbae */ "res 5,a", 0, /* cbaf */ "res 6,b", 0, /* cbb0 */ "res 6,c", 0, /* cbb1 */ "res 6,d", 0, /* cbb2 */ "res 6,e", 0, /* cbb3 */ "res 6,h", 0, /* cbb4 */ "res 6,l", 0, /* cbb5 */ "res 6,(hl)", 0, /* cbb6 */ "res 6,a", 0, /* cbb7 */ "res 7,b", 0, /* cbb8 */ "res 7,c", 0, /* cbb9 */ "res 7,d", 0, /* cbba */ "res 7,e", 0, /* cbbb */ "res 7,h", 0, /* cbbc */ "res 7,l", 0, /* cbbd */ "res 7,(hl)", 0, /* cbbe */ "res 7,a", 0, /* cbbf */ "set 0,b", 0, /* cbc0 */ "set 0,c", 0, /* cbc1 */ "set 0,d", 0, /* cbc2 */ "set 0,e", 0, /* cbc3 */ "set 0,h", 0, /* cbc4 */ "set 0,l", 0, /* cbc5 */ "set 0,(hl)", 0, /* cbc6 */ "set 0,a", 0, /* cbc7 */ "set 1,b", 0, /* cbc8 */ "set 1,c", 0, /* cbc9 */ "set 1,d", 0, /* cbca */ "set 1,e", 0, /* cbcb */ "set 1,h", 0, /* cbcc */ "set 1,l", 0, /* cbcd */ "set 1,(hl)", 0, /* cbce */ "set 1,a", 0, /* cbcf */ "set 2,b", 0, /* cbd0 */ "set 2,c", 0, /* cbd1 */ "set 2,d", 0, /* cbd2 */ "set 2,e", 0, /* cbd3 */ "set 2,h", 0, /* cbd4 */ "set 2,l", 0, /* cbd5 */ "set 2,(hl)", 0, /* cbd6 */ "set 2,a", 0, /* cbd7 */ "set 3,b", 0, /* cbd8 */ "set 3,c", 0, /* cbd9 */ "set 3,d", 0, /* cbda */ "set 3,e", 0, /* cbdb */ "set 3,h", 0, /* cbdc */ "set 3,l", 0, /* cbdd */ "set 3,(hl)", 0, /* cbde */ "set 3,a", 0, /* cbdf */ "set 4,b", 0, /* cbe0 */ "set 4,c", 0, /* cbe1 */ "set 4,d", 0, /* cbe2 */ "set 4,e", 0, /* cbe3 */ "set 4,h", 0, /* cbe4 */ "set 4,l", 0, /* cbe5 */ "set 4,(hl)", 0, /* cbe6 */ "set 4,a", 0, /* cbe7 */ "set 5,b", 0, /* cbe8 */ "set 5,c", 0, /* cbe9 */ "set 5,d", 0, /* cbea */ "set 5,e", 0, /* cbeb */ "set 5,h", 0, /* cbec */ "set 5,l", 0, /* cbed */ "set 5,(hl)", 0, /* cbee */ "set 5,a", 0, /* cbef */ "set 6,b", 0, /* cbf0 */ "set 6,c", 0, /* cbf1 */ "set 6,d", 0, /* cbf2 */ "set 6,e", 0, /* cbf3 */ "set 6,h", 0, /* cbf4 */ "set 6,l", 0, /* cbf5 */ "set 6,(hl)", 0, /* cbf6 */ "set 6,a", 0, /* cbf7 */ "set 7,b", 0, /* cbf8 */ "set 7,c", 0, /* cbf9 */ "set 7,d", 0, /* cbfa */ "set 7,e", 0, /* cbfb */ "set 7,h", 0, /* cbfc */ "set 7,l", 0, /* cbfd */ "set 7,(hl)", 0, /* cbfe */ "set 7,a", 0, /* cbff */ /* dd */ undefined, 0, /* dd00 */ undefined, 0, /* dd01 */ undefined, 0, /* dd02 */ undefined, 0, /* dd03 */ undefined, 0, /* dd04 */ undefined, 0, /* dd05 */ undefined, 0, /* dd06 */ undefined, 0, /* dd07 */ undefined, 0, /* dd08 */ "add ix,bc", 0, /* dd09 */ undefined, 0, /* dd0a */ undefined, 0, /* dd0b */ undefined, 0, /* dd0c */ undefined, 0, /* dd0d */ undefined, 0, /* dd0e */ undefined, 0, /* dd0f */ undefined, 0, /* dd10 */ undefined, 0, /* dd11 */ undefined, 0, /* dd12 */ undefined, 0, /* dd13 */ undefined, 0, /* dd14 */ undefined, 0, /* dd15 */ undefined, 0, /* dd16 */ undefined, 0, /* dd17 */ undefined, 0, /* dd18 */ "add ix,de", 0, /* dd19 */ undefined, 0, /* dd1a */ undefined, 0, /* dd1b */ undefined, 0, /* dd1c */ undefined, 0, /* dd1d */ undefined, 0, /* dd1e */ undefined, 0, /* dd1f */ undefined, 0, /* dd20 */ "ld ix,%02x%02xh", 2, /* dd21 */ "ld (%02x%02xh),ix",2, /* dd22 */ "inc ix", 0, /* dd23 */ undefined, 0, /* dd24 */ undefined, 0, /* dd25 */ undefined, 0, /* dd26 */ undefined, 0, /* dd27 */ undefined, 0, /* dd28 */ "add ix,ix", 0, /* dd29 */ "ld ix,(%02x%02xh)",2, /* dd2a */ "dec ix", 0, /* dd2b */ undefined, 0, /* dd2c */ undefined, 0, /* dd2d */ undefined, 0, /* dd2e */ undefined, 0, /* dd2f */ undefined, 0, /* dd30 */ undefined, 0, /* dd31 */ undefined, 0, /* dd32 */ undefined, 0, /* dd33 */ "inc (ix+%02xh)", 1, /* dd34 */ "dec (ix+%02xh)", 1, /* dd35 */ "ld (ix+%02xh),%02xh",2, /* dd36 */ undefined, 0, /* dd37 */ undefined, 0, /* dd38 */ "add ix,sp", 0, /* dd39 */ undefined, 0, /* dd3a */ undefined, 0, /* dd3b */ undefined, 0, /* dd3c */ undefined, 0, /* dd3d */ undefined, 0, /* dd3e */ undefined, 0, /* dd3f */ undefined, 0, /* dd40 */ undefined, 0, /* dd41 */ undefined, 0, /* dd42 */ undefined, 0, /* dd43 */ undefined, 0, /* dd44 */ undefined, 0, /* dd45 */ "ld b,(ix+%02xh)", 1, /* dd46 */ undefined, 0, /* dd47 */ undefined, 0, /* dd48 */ undefined, 0, /* dd49 */ undefined, 0, /* dd4a */ undefined, 0, /* dd4b */ undefined, 0, /* dd4c */ undefined, 0, /* dd4d */ "ld c,(ix+%02xh)", 1, /* dd4e */ undefined, 0, /* dd4f */ undefined, 0, /* dd50 */ undefined, 0, /* dd51 */ undefined, 0, /* dd52 */ undefined, 0, /* dd53 */ undefined, 0, /* dd54 */ undefined, 0, /* dd55 */ "ld d,(ix+%02xh)", 1, /* dd56 */ undefined, 0, /* dd57 */ undefined, 0, /* dd58 */ undefined, 0, /* dd59 */ undefined, 0, /* dd5a */ undefined, 0, /* dd5b */ undefined, 0, /* dd5c */ undefined, 0, /* dd5d */ "ld e,(ix+%02xh)", 1, /* dd5e */ undefined, 0, /* dd5f */ undefined, 0, /* dd60 */ undefined, 0, /* dd61 */ undefined, 0, /* dd62 */ undefined, 0, /* dd63 */ undefined, 0, /* dd64 */ undefined, 0, /* dd65 */ "ld h,(ix+%02xh)", 1, /* dd66 */ undefined, 0, /* dd67 */ undefined, 0, /* dd68 */ undefined, 0, /* dd69 */ undefined, 0, /* dd6a */ undefined, 0, /* dd6b */ undefined, 0, /* dd6c */ undefined, 0, /* dd6d */ "ld l,(ix+%02xh)", 1, /* dd6e */ undefined, 0, /* dd6f */ "ld (ix+%02xh),b", 1, /* dd70 */ "ld (ix+%02xh),c", 1, /* dd71 */ "ld (ix+%02xh),d", 1, /* dd72 */ "ld (ix+%02xh),e", 1, /* dd73 */ "ld (ix+%02xh),h", 1, /* dd74 */ "ld (ix+%02xh),l", 1, /* dd75 */ undefined, 0, /* dd76 */ "ld (ix+%02xh),a", 1, /* dd77 */ undefined, 0, /* dd78 */ undefined, 0, /* dd79 */ undefined, 0, /* dd7a */ undefined, 0, /* dd7b */ undefined, 0, /* dd7c */ undefined, 0, /* dd7d */ "ld a,(ix+%02xh)", 1, /* dd7e */ undefined, 0, /* dd7f */ undefined, 0, /* dd80 */ undefined, 0, /* dd81 */ undefined, 0, /* dd82 */ undefined, 0, /* dd83 */ undefined, 0, /* dd84 */ undefined, 0, /* dd85 */ "add a,(ix+%02xh)", 1, /* dd86 */ undefined, 0, /* dd87 */ undefined, 0, /* dd88 */ undefined, 0, /* dd89 */ undefined, 0, /* dd8a */ undefined, 0, /* dd8b */ undefined, 0, /* dd8c */ undefined, 0, /* dd8d */ "adc a,(ix+%02xh)", 1, /* dd8e */ undefined, 0, /* dd8f */ undefined, 0, /* dd90 */ undefined, 0, /* dd91 */ undefined, 0, /* dd92 */ undefined, 0, /* dd93 */ undefined, 0, /* dd94 */ undefined, 0, /* dd95 */ "sub (ix+%02xh)", 1, /* dd96 */ undefined, 0, /* dd97 */ undefined, 0, /* dd98 */ undefined, 0, /* dd99 */ undefined, 0, /* dd9a */ undefined, 0, /* dd9b */ undefined, 0, /* dd9c */ undefined, 0, /* dd9d */ "sbc a,(ix+%02xh)", 1, /* dd9e */ undefined, 0, /* dd9f */ undefined, 0, /* dda0 */ undefined, 0, /* dda1 */ undefined, 0, /* dda2 */ undefined, 0, /* dda3 */ undefined, 0, /* dda4 */ undefined, 0, /* dda5 */ "and (ix+%02xh)", 1, /* dda6 */ undefined, 0, /* dda7 */ undefined, 0, /* dda8 */ undefined, 0, /* dda9 */ undefined, 0, /* ddaa */ undefined, 0, /* ddab */ undefined, 0, /* ddac */ undefined, 0, /* ddad */ "xor (ix+%02xh)", 1, /* ddae */ undefined, 0, /* ddaf */ undefined, 0, /* ddb0 */ undefined, 0, /* ddb1 */ undefined, 0, /* ddb2 */ undefined, 0, /* ddb3 */ undefined, 0, /* ddb4 */ undefined, 0, /* ddb5 */ "or (ix+%02xh)", 1, /* ddb6 */ undefined, 0, /* ddb7 */ undefined, 0, /* ddb8 */ undefined, 0, /* ddb9 */ undefined, 0, /* ddba */ undefined, 0, /* ddbb */ undefined, 0, /* ddbc */ undefined, 0, /* ddbd */ "cp (ix+%02xh)", 1, /* ddbe */ undefined, 0, /* ddbf */ undefined, 0, /* ddc0 */ undefined, 0, /* ddc1 */ undefined, 0, /* ddc2 */ undefined, 0, /* ddc3 */ undefined, 0, /* ddc4 */ undefined, 0, /* ddc5 */ undefined, 0, /* ddc6 */ undefined, 0, /* ddc7 */ undefined, 0, /* ddc8 */ undefined, 0, /* ddc9 */ undefined, 0, /* ddca */ "dd cb %02x,%02x", 2, /* ddcb */ undefined, 0, /* ddcc */ undefined, 0, /* ddcd */ undefined, 0, /* ddce */ undefined, 0, /* ddcf */ undefined, 0, /* ddd0 */ undefined, 0, /* ddd1 */ undefined, 0, /* ddd2 */ undefined, 0, /* ddd3 */ undefined, 0, /* ddd4 */ undefined, 0, /* ddd5 */ undefined, 0, /* ddd6 */ undefined, 0, /* ddd7 */ undefined, 0, /* ddd8 */ undefined, 0, /* ddd9 */ undefined, 0, /* ddda */ undefined, 0, /* dddb */ undefined, 0, /* dddc */ undefined, 0, /* dddd */ undefined, 0, /* ddde */ undefined, 0, /* dddf */ undefined, 0, /* dde0 */ "pop ix", 0, /* dde1 */ undefined, 0, /* dde2 */ "ex (sp),ix", 0, /* dde3 */ undefined, 0, /* dde4 */ "push ix", 0, /* dde5 */ undefined, 0, /* dde6 */ undefined, 0, /* dde7 */ undefined, 0, /* dde8 */ "jp (ix)", 0, /* dde9 */ undefined, 0, /* ddea */ undefined, 0, /* ddeb */ undefined, 0, /* ddec */ undefined, 0, /* dded */ undefined, 0, /* ddee */ undefined, 0, /* ddef */ undefined, 0, /* ddf0 */ undefined, 0, /* ddf1 */ undefined, 0, /* ddf2 */ undefined, 0, /* ddf3 */ undefined, 0, /* ddf4 */ undefined, 0, /* ddf5 */ undefined, 0, /* ddf6 */ undefined, 0, /* ddf7 */ undefined, 0, /* ddf8 */ "ld sp,ix", 0, /* ddf9 */ undefined, 0, /* ddfa */ undefined, 0, /* ddfb */ undefined, 0, /* ddfc */ undefined, 0, /* ddfd */ undefined, 0, /* ddfe */ undefined, 0, /* ddff */ /* ed */ undefined, 0, /* ed00 */ undefined, 0, /* ed01 */ undefined, 0, /* ed02 */ undefined, 0, /* ed03 */ undefined, 0, /* ed04 */ undefined, 0, /* ed05 */ undefined, 0, /* ed06 */ undefined, 0, /* ed07 */ undefined, 0, /* ed08 */ undefined, 0, /* ed09 */ undefined, 0, /* ed0a */ undefined, 0, /* ed0b */ undefined, 0, /* ed0c */ undefined, 0, /* ed0d */ undefined, 0, /* ed0e */ undefined, 0, /* ed0f */ undefined, 0, /* ed10 */ undefined, 0, /* ed11 */ undefined, 0, /* ed12 */ undefined, 0, /* ed13 */ undefined, 0, /* ed14 */ undefined, 0, /* ed15 */ undefined, 0, /* ed16 */ undefined, 0, /* ed17 */ undefined, 0, /* ed18 */ undefined, 0, /* ed19 */ undefined, 0, /* ed1a */ undefined, 0, /* ed1b */ undefined, 0, /* ed1c */ undefined, 0, /* ed1d */ undefined, 0, /* ed1e */ undefined, 0, /* ed1f */ undefined, 0, /* ed20 */ undefined, 0, /* ed21 */ undefined, 0, /* ed22 */ undefined, 0, /* ed23 */ undefined, 0, /* ed24 */ undefined, 0, /* ed25 */ undefined, 0, /* ed26 */ undefined, 0, /* ed27 */ undefined, 0, /* ed28 */ undefined, 0, /* ed29 */ undefined, 0, /* ed2a */ undefined, 0, /* ed2b */ undefined, 0, /* ed2c */ undefined, 0, /* ed2d */ undefined, 0, /* ed2e */ undefined, 0, /* ed2f */ undefined, 0, /* ed30 */ undefined, 0, /* ed31 */ undefined, 0, /* ed32 */ undefined, 0, /* ed33 */ undefined, 0, /* ed34 */ undefined, 0, /* ed35 */ undefined, 0, /* ed36 */ undefined, 0, /* ed37 */ undefined, 0, /* ed38 */ undefined, 0, /* ed39 */ undefined, 0, /* ed3a */ undefined, 0, /* ed3b */ undefined, 0, /* ed3c */ undefined, 0, /* ed3d */ undefined, 0, /* ed3e */ undefined, 0, /* ed3f */ "in b,(c)", 0, /* ed40 */ "out (c),b", 0, /* ed41 */ "sbc hl,bc", 0, /* ed42 */ "ld (%02x%02xh),bc",2, /* ed43 */ "neg", 0, /* ed44 */ "retn", 0, /* ed45 */ "im 0", 0, /* ed46 */ "ld i,a", 0, /* ed47 */ "in c,(c)", 0, /* ed48 */ "out (c),c", 0, /* ed49 */ "adc hl,bc", 0, /* ed4a */ "ld bc,(%02x%02xh)",2, /* ed4b */ undefined, 0, /* ed4c */ "reti", 0, /* ed4d */ undefined, 0, /* ed4e */ undefined, 0, /* ed4f */ "in d,(c)", 0, /* ed50 */ "out (c),d", 0, /* ed51 */ "sbc hl,de", 0, /* ed52 */ "ld (%02x%02xh),de",2, /* ed53 */ undefined, 0, /* ed54 */ undefined, 0, /* ed55 */ "im 1", 0, /* ed56 */ "ld a,i", 0, /* ed57 */ "in e,(c)", 0, /* ed58 */ "out (c),e", 0, /* ed59 */ "adc hl,de", 0, /* ed5a */ "ld de,(%02x%02xh)",2, /* ed5b */ undefined, 0, /* ed5c */ undefined, 0, /* ed5d */ "im 2", 0, /* ed5e */ undefined, 0, /* ed5f */ "in h,(c)", 0, /* ed60 */ "out (c),h", 0, /* ed61 */ "sbc hl,hl", 0, /* ed62 */ undefined, 0, /* ed63 */ undefined, 0, /* ed64 */ undefined, 0, /* ed65 */ undefined, 0, /* ed66 */ "rrd", 0, /* ed67 */ "in l,(c)", 0, /* ed68 */ "out (c),l", 0, /* ed69 */ "adc hl,hl", 0, /* ed6a */ undefined, 0, /* ed6b */ undefined, 0, /* ed6c */ undefined, 0, /* ed6d */ undefined, 0, /* ed6e */ "rld", 0, /* ed6f */ undefined, 0, /* ed70 */ undefined, 0, /* ed71 */ "sbc hl,sp", 0, /* ed72 */ "ld (%02x%02xh),sp",2, /* ed73 */ undefined, 0, /* ed74 */ undefined, 0, /* ed75 */ undefined, 0, /* ed76 */ undefined, 0, /* ed77 */ "in a,(c)", 0, /* ed78 */ "out (c),a", 0, /* ed79 */ "adc hl,sp", 0, /* ed7a */ "ld sp,(%02x%02xh)",2, /* ed7b */ undefined, 0, /* ed7c */ undefined, 0, /* ed7d */ undefined, 0, /* ed7e */ undefined, 0, /* ed7f */ undefined, 0, /* ed80 */ undefined, 0, /* ed81 */ undefined, 0, /* ed82 */ undefined, 0, /* ed83 */ undefined, 0, /* ed84 */ undefined, 0, /* ed85 */ undefined, 0, /* ed86 */ undefined, 0, /* ed87 */ undefined, 0, /* ed88 */ undefined, 0, /* ed89 */ undefined, 0, /* ed8a */ undefined, 0, /* ed8b */ undefined, 0, /* ed8c */ undefined, 0, /* ed8d */ undefined, 0, /* ed8e */ undefined, 0, /* ed8f */ undefined, 0, /* ed90 */ undefined, 0, /* ed91 */ undefined, 0, /* ed92 */ undefined, 0, /* ed93 */ undefined, 0, /* ed94 */ undefined, 0, /* ed95 */ undefined, 0, /* ed96 */ undefined, 0, /* ed97 */ undefined, 0, /* ed98 */ undefined, 0, /* ed99 */ undefined, 0, /* ed9a */ undefined, 0, /* ed9b */ undefined, 0, /* ed9c */ undefined, 0, /* ed9d */ undefined, 0, /* ed9e */ undefined, 0, /* ed9f */ "ldi", 0, /* eda0 */ "cpi", 0, /* eda1 */ "ini", 0, /* eda2 */ "outi", 0, /* eda3 */ undefined, 0, /* eda4 */ undefined, 0, /* eda5 */ undefined, 0, /* eda6 */ undefined, 0, /* eda7 */ "ldd", 0, /* eda8 */ "cpd", 0, /* eda9 */ "ind", 0, /* edaa */ "outd", 0, /* edab */ undefined, 0, /* edac */ undefined, 0, /* edad */ undefined, 0, /* edae */ undefined, 0, /* edaf */ "ldir", 0, /* edb0 */ "cpir", 0, /* edb1 */ "inir", 0, /* edb2 */ "otir", 0, /* edb3 */ undefined, 0, /* edb4 */ undefined, 0, /* edb5 */ undefined, 0, /* edb6 */ undefined, 0, /* edb7 */ "lddr", 0, /* edb8 */ "cpdr", 0, /* edb9 */ "indr", 0, /* edba */ "otdr", 0, /* edbb */ undefined, 0, /* edbc */ undefined, 0, /* edbd */ undefined, 0, /* edbe */ undefined, 0, /* edbf */ undefined, 0, /* edc0 */ undefined, 0, /* edc1 */ undefined, 0, /* edc2 */ undefined, 0, /* edc3 */ undefined, 0, /* edc4 */ undefined, 0, /* edc5 */ undefined, 0, /* edc6 */ undefined, 0, /* edc7 */ undefined, 0, /* edc8 */ undefined, 0, /* edc9 */ undefined, 0, /* edca */ undefined, 0, /* edcb */ undefined, 0, /* edcc */ undefined, 0, /* edcd */ undefined, 0, /* edce */ undefined, 0, /* edcf */ undefined, 0, /* edd0 */ undefined, 0, /* edd1 */ undefined, 0, /* edd2 */ undefined, 0, /* edd3 */ undefined, 0, /* edd4 */ undefined, 0, /* edd5 */ undefined, 0, /* edd6 */ undefined, 0, /* edd7 */ undefined, 0, /* edd8 */ undefined, 0, /* edd9 */ undefined, 0, /* edda */ undefined, 0, /* eddb */ undefined, 0, /* eddc */ undefined, 0, /* eddd */ undefined, 0, /* edde */ undefined, 0, /* eddf */ undefined, 0, /* ede0 */ undefined, 0, /* ede1 */ undefined, 0, /* ede2 */ undefined, 0, /* ede3 */ undefined, 0, /* ede4 */ undefined, 0, /* ede5 */ undefined, 0, /* ede6 */ undefined, 0, /* ede7 */ undefined, 0, /* ede8 */ undefined, 0, /* ede9 */ undefined, 0, /* edea */ undefined, 0, /* edeb */ undefined, 0, /* edec */ undefined, 0, /* eded */ undefined, 0, /* edee */ undefined, 0, /* edef */ undefined, 0, /* edf0 */ undefined, 0, /* edf1 */ undefined, 0, /* edf2 */ undefined, 0, /* edf3 */ undefined, 0, /* edf4 */ undefined, 0, /* edf5 */ undefined, 0, /* edf6 */ undefined, 0, /* edf7 */ undefined, 0, /* edf8 */ undefined, 0, /* edf9 */ undefined, 0, /* edfa */ undefined, 0, /* edfb */ undefined, 0, /* edfc */ undefined, 0, /* edfd */ undefined, 0, /* edfe */ undefined, 0, /* edff */ /* fd */ undefined, 0, /* fd00 */ undefined, 0, /* fd01 */ undefined, 0, /* fd02 */ undefined, 0, /* fd03 */ undefined, 0, /* fd04 */ undefined, 0, /* fd05 */ undefined, 0, /* fd06 */ undefined, 0, /* fd07 */ undefined, 0, /* fd08 */ "add iy,bc", 0, /* fd09 */ undefined, 0, /* fd0a */ undefined, 0, /* fd0b */ undefined, 0, /* fd0c */ undefined, 0, /* fd0d */ undefined, 0, /* fd0e */ undefined, 0, /* fd0f */ undefined, 0, /* fd10 */ undefined, 0, /* fd11 */ undefined, 0, /* fd12 */ undefined, 0, /* fd13 */ undefined, 0, /* fd14 */ undefined, 0, /* fd15 */ undefined, 0, /* fd16 */ undefined, 0, /* fd17 */ undefined, 0, /* fd18 */ "add iy,de", 0, /* fd19 */ undefined, 0, /* fd1a */ undefined, 0, /* fd1b */ undefined, 0, /* fd1c */ undefined, 0, /* fd1d */ undefined, 0, /* fd1e */ undefined, 0, /* fd1f */ undefined, 0, /* fd20 */ "ld iy,%02x%02xh", 2, /* fd21 */ "ld (%02x%02xh),iy",2, /* fd22 */ "inc iy", 0, /* fd23 */ undefined, 0, /* fd24 */ undefined, 0, /* fd25 */ undefined, 0, /* fd26 */ undefined, 0, /* fd27 */ undefined, 0, /* fd28 */ "add iy,iy", 0, /* fd29 */ "ld iy,(%02x%02xh)",2, /* fd2a */ "dec iy", 0, /* fd2b */ undefined, 0, /* fd2c */ undefined, 0, /* fd2d */ undefined, 0, /* fd2e */ undefined, 0, /* fd2f */ undefined, 0, /* fd30 */ undefined, 0, /* fd31 */ undefined, 0, /* fd32 */ undefined, 0, /* fd33 */ "inc (iy+%02xh)", 1, /* fd34 */ "dec (iy+%02xh)", 1, /* fd35 */ "ld (iy+%02xh),%02xh",2, /* fd36 */ undefined, 0, /* fd37 */ undefined, 0, /* fd38 */ "add iy,sp", 0, /* fd39 */ undefined, 0, /* fd3a */ undefined, 0, /* fd3b */ undefined, 0, /* fd3c */ undefined, 0, /* fd3d */ undefined, 0, /* fd3e */ undefined, 0, /* fd3f */ undefined, 0, /* fd40 */ undefined, 0, /* fd41 */ undefined, 0, /* fd42 */ undefined, 0, /* fd43 */ undefined, 0, /* fd44 */ undefined, 0, /* fd45 */ "ld b,(iy+%02xh)", 1, /* fd46 */ undefined, 0, /* fd47 */ undefined, 0, /* fd48 */ undefined, 0, /* fd49 */ undefined, 0, /* fd4a */ undefined, 0, /* fd4b */ undefined, 0, /* fd4c */ undefined, 0, /* fd4d */ "ld c,(iy+%02xh)", 1, /* fd4e */ undefined, 0, /* fd4f */ undefined, 0, /* fd50 */ undefined, 0, /* fd51 */ undefined, 0, /* fd52 */ undefined, 0, /* fd53 */ undefined, 0, /* fd54 */ undefined, 0, /* fd55 */ "ld d,(iy+%02xh)", 1, /* fd56 */ undefined, 0, /* fd57 */ undefined, 0, /* fd58 */ undefined, 0, /* fd59 */ undefined, 0, /* fd5a */ undefined, 0, /* fd5b */ undefined, 0, /* fd5c */ undefined, 0, /* fd5d */ "ld e,(iy+%02xh)", 1, /* fd5e */ undefined, 0, /* fd5f */ undefined, 0, /* fd60 */ undefined, 0, /* fd61 */ undefined, 0, /* fd62 */ undefined, 0, /* fd63 */ undefined, 0, /* fd64 */ undefined, 0, /* fd65 */ "ld h,(iy+%02xh)", 1, /* fd66 */ undefined, 0, /* fd67 */ undefined, 0, /* fd68 */ undefined, 0, /* fd69 */ undefined, 0, /* fd6a */ undefined, 0, /* fd6b */ undefined, 0, /* fd6c */ undefined, 0, /* fd6d */ "ld l,(iy+%02xh)", 1, /* fd6e */ undefined, 0, /* fd6f */ "ld (iy+%02xh),b", 1, /* fd70 */ "ld (iy+%02xh),c", 1, /* fd71 */ "ld (iy+%02xh),d", 1, /* fd72 */ "ld (iy+%02xh),e", 1, /* fd73 */ "ld (iy+%02xh),h", 1, /* fd74 */ "ld (iy+%02xh),l", 1, /* fd75 */ undefined, 0, /* fd76 */ "ld (iy+%02xh),a", 1, /* fd77 */ undefined, 0, /* fd78 */ undefined, 0, /* fd79 */ undefined, 0, /* fd7a */ undefined, 0, /* fd7b */ undefined, 0, /* fd7c */ undefined, 0, /* fd7d */ "ld a,(iy+%02xh)", 1, /* fd7e */ undefined, 0, /* fd7f */ undefined, 0, /* fd80 */ undefined, 0, /* fd81 */ undefined, 0, /* fd82 */ undefined, 0, /* fd83 */ undefined, 0, /* fd84 */ undefined, 0, /* fd85 */ "add a,(iy+%02xh)", 1, /* fd86 */ undefined, 0, /* fd87 */ undefined, 0, /* fd88 */ undefined, 0, /* fd89 */ undefined, 0, /* fd8a */ undefined, 0, /* fd8b */ undefined, 0, /* fd8c */ undefined, 0, /* fd8d */ "adc a,(iy+%02xh)", 1, /* fd8e */ undefined, 0, /* fd8f */ undefined, 0, /* fd90 */ undefined, 0, /* fd91 */ undefined, 0, /* fd92 */ undefined, 0, /* fd93 */ undefined, 0, /* fd94 */ undefined, 0, /* fd95 */ "sub (iy+%02xh)", 1, /* fd96 */ undefined, 0, /* fd97 */ undefined, 0, /* fd98 */ undefined, 0, /* fd99 */ undefined, 0, /* fd9a */ undefined, 0, /* fd9b */ undefined, 0, /* fd9c */ undefined, 0, /* fd9d */ "sbc a,(iy+%02xh)", 1, /* fd9e */ undefined, 0, /* fd9f */ undefined, 0, /* fda0 */ undefined, 0, /* fda1 */ undefined, 0, /* fda2 */ undefined, 0, /* fda3 */ undefined, 0, /* fda4 */ undefined, 0, /* fda5 */ "and (iy+%02xh)", 1, /* fda6 */ undefined, 0, /* fda7 */ undefined, 0, /* fda8 */ undefined, 0, /* fda9 */ undefined, 0, /* fdaa */ undefined, 0, /* fdab */ undefined, 0, /* fdac */ undefined, 0, /* fdad */ "xor (iy+%02xh)", 1, /* fdae */ undefined, 0, /* fdaf */ undefined, 0, /* fdb0 */ undefined, 0, /* fdb1 */ undefined, 0, /* fdb2 */ undefined, 0, /* fdb3 */ undefined, 0, /* fdb4 */ undefined, 0, /* fdb5 */ "or (iy+%02xh)", 1, /* fdb6 */ undefined, 0, /* fdb7 */ undefined, 0, /* fdb8 */ undefined, 0, /* fdb9 */ undefined, 0, /* fdba */ undefined, 0, /* fdbb */ undefined, 0, /* fdbc */ undefined, 0, /* fdbd */ "cp (iy+%02xh)", 1, /* fdbe */ undefined, 0, /* fdbf */ undefined, 0, /* fdc0 */ undefined, 0, /* fdc1 */ undefined, 0, /* fdc2 */ undefined, 0, /* fdc3 */ undefined, 0, /* fdc4 */ undefined, 0, /* fdc5 */ undefined, 0, /* fdc6 */ undefined, 0, /* fdc7 */ undefined, 0, /* fdc8 */ undefined, 0, /* fdc9 */ undefined, 0, /* fdca */ "fd cb %02x,%02x", 2, /* fdcb */ undefined, 0, /* fdcc */ undefined, 0, /* fdcd */ undefined, 0, /* fdce */ undefined, 0, /* fdcf */ undefined, 0, /* fdd0 */ undefined, 0, /* fdd1 */ undefined, 0, /* fdd2 */ undefined, 0, /* fdd3 */ undefined, 0, /* fdd4 */ undefined, 0, /* fdd5 */ undefined, 0, /* fdd6 */ undefined, 0, /* fdd7 */ undefined, 0, /* fdd8 */ undefined, 0, /* fdd9 */ undefined, 0, /* fdda */ undefined, 0, /* fddb */ undefined, 0, /* fddc */ undefined, 0, /* fddd */ undefined, 0, /* fdde */ undefined, 0, /* fddf */ undefined, 0, /* fde0 */ "pop iy", 0, /* fde1 */ undefined, 0, /* fde2 */ "ex (sp),iy", 0, /* fde3 */ undefined, 0, /* fde4 */ "push iy", 0, /* fde5 */ undefined, 0, /* fde6 */ undefined, 0, /* fde7 */ undefined, 0, /* fde8 */ "jp (iy)", 0, /* fde9 */ undefined, 0, /* fdea */ undefined, 0, /* fdeb */ undefined, 0, /* fdec */ undefined, 0, /* fded */ undefined, 0, /* fdee */ undefined, 0, /* fdef */ undefined, 0, /* fdf0 */ undefined, 0, /* fdf1 */ undefined, 0, /* fdf2 */ undefined, 0, /* fdf3 */ undefined, 0, /* fdf4 */ undefined, 0, /* fdf5 */ undefined, 0, /* fdf6 */ undefined, 0, /* fdf7 */ undefined, 0, /* fdf8 */ "ld sp,iy", 0, /* fdf9 */ undefined, 0, /* fdfa */ undefined, 0, /* fdfb */ undefined, 0, /* fdfc */ undefined, 0, /* fdfd */ undefined, 0, /* fdfe */ undefined, 0, /* fdff */ }; int curaddr = 0; main () { int i, j, arg1, arg2; struct opcode *code; int addr; for (;;) { addr = curaddr; i = gethex(); if (!major[i].name) { j = major[i].args; i = gethex(); while (!minor[j][i].name) { j = minor[j][i].args; i = gethex (); } code = &minor[j][i]; } else code = &major[i]; printf ("%04x\t", addr); switch (code->args) { case 2: printf (code->name, gethex(), gethex()); break; case 1: printf (code->name, gethex()); break; case 0: printf (code->name); break; } putchar ('\n'); } } int inline; int index; char linebuf[1024]; int hexbuf[1024]; gethex () { if (index == inline) { again: ; if (gets (linebuf) == 0) exit (0); if (strlen (linebuf) < 9) goto again; inline = fromhex (linebuf+1); for (index = 0; index < inline; index++) hexbuf[index] = fromhex (linebuf+9 + 2 * index); index = 0; } ++curaddr; return hexbuf[index++]; } #define hexval(c) (('0' <= (c) && (c) <= '9') ? (c) - '0' :\ (('a' <= (c) && (c) <= 'f') ? (c) - 'a' + 10 :\ (('A' <= (c) && (c) <= 'F') ? (c) - 'A' + 10 :\ -1 ))) fromhex (c) char *c; { return hexval(c[0]) * 16 + hexval(c[1]); } SHAR_EOF if test 37358 -ne "`wc -c < 'zdis.c'`" then echo shar: error transmitting "'zdis.c'" '(should have been 37358 characters)' fi chmod +x 'zdis.c' fi # end of overwriting check echo shar: extracting "'serial.z'" '(19313 characters)' if test -f 'serial.z' then echo shar: will not over-write existing file "'serial.z'" else cat << \SHAR_EOF > 'serial.z' ; SCCS flags: serial.z 1.8 9/21/82 ; ; This program is a quick and dirty controller program ; for the simple Z80 serial interface card for the Red ; display controller. ; ; It uses two 256 byte buffers to buffer data to and from the ; host. This helps make up for the obnoxiously slow rs232. ; ; History: ; jrp 3-18-82 v1.0 Initial version by John Providenza. ; ; jrp 3-22-82 v1.1 Added code to send a Xon (Cntrlq) at reset ; if the dip switch is set to Xon/Xoff mode. ; ; jrp 4-20-82 v1.2 Added SCCS flags as comment in header and ; as a "ascii" block after a reset jmp. ; ; jrp 4-20-82 v1.3 Changed crt modem flags to RLSD = Out Buf Full, ; RI = In Buf Full. ; ; jrp 4-21-82 v1.4 Added diagnostic code to test ram, switches, and ; uart. ; ; jrp 4-30-82 v1.5 Cleaned up some code, added some more comments. ; ; jrp 5-27-82 v1.6 Fixed bug that caused output buffer to overflow ; in Hex mode. ; ; jrp 6-22-82 v1.7 Added 'end of message' command in hex mode. ; This is active only in hex mode and only if a ; non 0 byte count is specified (0 is default) ; 'l' is used to specify byte count, 'm' specifies ; the eom char. Both expect 2 hex digits following ; to specify the apropriate parameter. ; ; jrp 8-23-82 v1.8 Added code to allow send/recv in different modes. ; Thus the host can send in raw mode and receive in hex ; mode, allowing CntrlS/Q flow control. ; Also added 's' command in 'hex' mode to reset the SWTCH ; settings. ; Also added break detect to reset the mode/baud to the ; switch settings. ; switch dIN dOUT Flow Control. ; 7 6 5 ; 0 0 0 raw raw No flow control. ; 0 0 1 raw hex Xon/Xoff sent to host. ; 0 1 0 hex raw Xon/Xoff received from host. ; 0 1 1 hex hex Full Xon/Xoff. ; 1 0 0 raw raw Full modem flow control. ; 1 0 1 raw hex Full modem flow control. ; 1 1 0 hex raw Full modem flow control. ; 1 1 1 hex hex Full modem flow control. ; ; SCCS flags: serial.z 1.8 9/21/82 eject 1 ; Serial port equates. Serial equ 00H ; base address of 8250 controller. Ier equ 01H ; Interrupt Enable Reg Iir equ 02H ; Interrupt Ident Reg Lcr equ 03H ; Line Control Reg Mcr equ 04H ; Modem Control Reg Lsr equ 05H ; Line Status Reg Msr equ 06H ; Modem Status Reg ; These equates define bits in the Msr. DsrIn equ 05 ; Data Set Ready input CtsIn equ 04 ; Clear to Send input InMt equ 06 ; No data from display controller = 1 (Ring In) OutMt equ 07 ; Crt ready for next byte = 1 (Rcvd Line Signal Detct) ; These equates define bits in the Lsr DataRdy equ 00 ; Input data ready. Break equ 04 ; Break condition. XmitMt equ 05 ; Xmitter buffer empty. ; These equates define bits in the Mcr DtrOut equ 00 ; Data terminal ready output. RtsOut equ 01 ; Request to send output. ; Misc definitions. Crt equ 80H ; Parallel port to display controller. Baud equ 40H ; Switches port. Stack equ 0FFFFH ; Mailbox equates. Head equ 0 Tail equ 1 Count equ 2 Base equ 3 Status equ 4 UnChar equ 5 ; Should be used only for CntrlS and CntrlQ ; Equates for the Queue status byte XmitOff equ 00 ; xmitter is disabled. ; Baud/Switch equates. Bmask equ 0FH Rawout equ 020H RObit equ 5 Rawin equ 040H RIbit equ 6 Xon equ 080H Xonbit equ 7 ; Some ASCII character equates. CntrlS equ 19 ; Xoff CntrlQ equ 17 ; Xon Cr equ 13 ; Carriage return. eject 1 ORG 0FC00H RAM_START: ; Variable declarations ; Ram is in the top 1K of memory. ; Queues. ; These are the actual data buffers. The only routine that should use ; these labels re INIT_V to set the mailbox data pointers up. ; All I/O is via GETQ and PUTQ routines. INBUF: block 256 ; input buffer q. OUTBUF: block 256 ; output buffer q. UNUSED: block 256 ; unused ram ; Now the ram for variables and stack. SWTCH: block 1 ; Current baud/switches ; Variable for the H_to_Q routine ; It holds the upper nibble of hex until the lower one arrives. ; Bit 0 = 1 for empty, 0 for upper nibble full. H_to_QV: block 1 ; End of message variables. MESS_LEN: block 1 ; How long messages are. MESS_CNT: block 1 ; Number of chars in current message. EOM_CHAR: block 1 ; The end of message char. ; In and Out queues variables. INBOX: block 6 OUTBOX: block 6 eject 1 ; Mainline loop. ORG 0 JP RESET ; Jmp to the code ; Put in ID string ascii 'serial.z 1.8' RESET: LD SP, Stack CALL CHECK ; Check the hardware out. CALL INIT_HW ; Init the hardware devices. CALL INIT_V ; Init the variables. LD IX,OUTBOX ; Point to the outbox. LD A,(SWTCH) ; Check if we're in Xon/Xoff mode. AND Xon LD A,Cntrlq ; Send a Xon to host if we're in that mode CALL NZ,PUTQ ; Now loop checking for data available from host or display controller. ; Also check if we can send data to them. LOOP: IN A,(Lsr) ; Get the line status. LD C,A IN A,(Msr) ; Get the modem status. LD B,A ; and save it ; B = Msr, C = Lsr. ; Check for break condition. BIT Break,C ; test the bit in the Lsr JR Z,LOOP1 CALL SETBAUD ; reset the SWTCH variable. CALL INIT_V ; reset all the variables JR LOOP LOOP1: CALL HOST_IN CALL DISP_IN CALL DISP_OUT CALL HOST_OUT JR LOOP eject 1 ; Check if data is ready from host. HOST_IN: BIT DataRdy,C ; Data ready? RET Z ; Ret if no. ; Handle a byte from the Host. LD IX,INBOX ; data will go into the Input Q. LD A,(SWTCH) ; check for Raw or encoded mode. LD H,A AND Rawin ; NZ for Raw mode IN A,(Serial) ; get the data byte. JR Z,HEX_IN ; Jmp if hex data in. RAW_IN: ; Process Raw data CALL PUTQ JP STOP_IN ; stop the input if needed. HEX_IN: AND 7FH ; Kill any parity bit. CP ' ' ; Printable ASCII? JR NC,PRINT ; Jmp if yes ; Control character. CP Cr ; Carriage Ret? JR NZ,IN_FLOW ; Jp if no. LD A,1 ; Set the H_to_Q variable to empty. LD (H_to_QV),A ; This flushes any partially assembled byte. RET ; Done ; Test for Xon/Xoff commands. IN_FLOW: BIT Xonbit,H ; Are we sensitive to them? RET Z ; Ret if no. LD HL,OUTBOX+Status ; Get a pointer to our outbox status. CP CntrlS ; Xoff our transmitter? JR NZ,NOT_XOFF ; Jmp if no. OFF: SET XmitOff,(HL) RET NOT_XOFF: CP CntrlQ ; Xon our xmitter? RET NZ ; ret if no. ON: RES XmitOff,(HL) RET ; Printable char received from host. PRINT: ; Printable character received in hex mode. SET 5,A ; Convert to lower case. CP 'l' ; Message length command? JR NZ,PRINT1 ; Jmp if no. CALL GET_HEX ; Get byte from UART LD (MESS_LEN),A ; Set the message length. LD (MESS_CNT),A ; Reset the number of chars sent so far. RET PRINT1: CP 'm' ; EOM char set command? JR NZ,PRINT2 CALL GET_HEX ; Get byte from UART LD (EOM_CHAR),A RET PRINT2: CP 's' ; change SWTCH command? JR NZ,PRINT3 CALL GET_HEX ; Get byte from UART CPL ; Toggle them. LD (SWTCH),A RET PRINT3: CALL H_to_Q ; Pack the encoded data into bytes. JP STOP_IN ; stop the input if needed. eject 1 ; Data ready from controller? DISP_IN: BIT InMt,B ; data from controller? RET NZ ; ret if no. LD IX,OUTBOX LD A,(IX+Count) ; Get the Q count. ADD A,3 ; Check if Q has room for 3 more bytes. RET C ; ret if no LD A,(SWTCH) ; check if we need to encode the data. AND Rawout IN A,(Crt) ; get the data from the crt. JP NZ,PUTQ ; send the raw data and return. ; hex data out to host. CALL B_to_H ; convert byte to hex format and stick in Q. ; Check if we need to stick an EOM char in. LD A,(MESS_LEN) ; Get the length. AND A RET Z ; Zero means no EOM character to be sent. LD HL,MESS_CNT ; Point to the counter. DEC (HL) ; Time to send a EOM char? RET NZ ; Ret if no. LD (HL),A ; reset the length. LD A,(EOM_CHAR) ; Get the char and stick it in the Q. JP PUTQ ; and return when done eject 1 ; Controller ready for data? DISP_OUT: BIT OutMt,B ; controller ready for data? RET Z ; Jmp if no LD IX,INBOX CALL GETQ ; get a byte for controller. RET C ; ret if no byte available. OUT (Crt),A ; send char to display. JP STRT_IN ; re-enable host xmitter if needed. eject 1 ; Host ready for data? HOST_OUT: BIT XmitMt,C ; Uart xmitter empty? RET Z ; ret if no. LD IX,OUTBOX ; Get OutBox pointer. LD A,(SWTCH) ; Check for Xon mode AND Xon JR NZ,H_O_Xon ; Jp if Xon mode. BIT CtsIn,B ; Clear to send? RET Z ; ret if no. JR H_O_Send ; We are clear to send. H_O_Xon: LD A,(OUTBOX+UnChar) AND A JR NZ,H_O_Send ; Always send an 'UnChar' BIT XmitOff,(IX+Status) RET NZ ; ret if xmitter is disabled. H_O_Send: CALL GETQ RET C ; Ret if no character available. OUT (Serial),A RET eject 1 ; Check the hardware out. ; Call this routine only after a external reset!!!! CHECK: ; Check the baud switch (really crude). IN A,(BAUD) ; Get the baud switch. LD B,A ; Save it. IN A,(BAUD) CP B ; Same as last time? BAD_B: ; Switch ERROR - Can't read switches twice in a row. JR NZ,BAD_B ; Loop if no. ; Check the ram. ; Write the complement of the low byte of address out to all ram, ; then check if it stayed the same. ; Note that this destroys all ram contents. POP DE ; Save the return address in a register. LD HL,RAM_START ; Get the first address of ram. LD B, NOT [RAM_START & 0FFH] LD C,B ; Get complement of low address byte. ; Load the ram with the pattern. RAM1: LD (HL),B DEC B INC HL LD A,H ; Test for done. OR L JR NZ,RAM1 ; Loop till all locations written. LD HL,RAM_START ; Get the first address of ram. ; Check if ram agrees with what should be there. RAM2: LD A,(HL) ; Get the byte. XOR C ; Same as its low address byte? JR Z,RAM6 ; Jmp if yes. ; Ram error. We have three loops: low bad, high bad, both bad. LD B,A ; Save the symptom. AND 0FH ; Low nibble bad? RAM3: ; Ram ERROR - bad high nibble. JR Z,RAM3 ; Jmp if no. LD A,B ; get the symptom back. AND 0F0H ; High nibble bad too? RAM4: ; Ram ERROR - bad low nibble. JR Z,RAM4 ; Loop if error. RAM5: ; Ram ERROR - both nibbles bad. JR RAM5 RAM6: DEC C INC HL LD A,H ; Done? OR L JR NZ,RAM2 ; Jmp if no. PUSH DE ; Fix the stack back up. ; Check out the National Semi INS8250 Uart. ; Since we were reset, Lcr should be zero. IN A,(Lcr) ; Get the Line Control reg AND A U0: ; Uart ERROR - Lcr not reset properly. JR NZ,U0 ; Loop if error. LD A,80H OUT (Lcr),A ; And set the Divisor access bit. IN A,(Lcr) ; Check that it got set. CP 80H ; Still set? U1: ; Uart ERROR - Lcr won't hold divisor access bit. JR NZ,U1 ; Loop if error. LD A,3 ; Try to set 38.4K baud OUT (Serial),A ; Ld the divisor. IN A,(Serial) ; Test that it loaded OK. SUB 3 ; Check if same (also set A to zero) U2: ; Uart ERROR - unexpected low divisor. JR NZ,U2 ; Loop if error. OUT (Ier),A ; Set high byte to zero IN A,(Ier) AND A ; Still zero? U3: ; Uart ERROR - unexpected high divisor. JR NZ,U3 ; Loop if no (ie, error). IN A,(Lcr) ; Get the Line reg back. SUB 80H ; Is it the same as before? U4: ; Uart ERROR - unexpected Lcr value after setting divisor. JR NZ,U4 ; loop if error. OUT (Lcr),A ; Turn off divisor access bit. IN A,(Lcr) ; Check it. AND A U5: ; Uart ERROR - Lcr won't reset after setting divisor. JR NZ,U5 LD A,7 OUT (Lcr),A ; 8 bits, no parity, 2 stop bits IN A,(Lcr) SUB 7 ; Test if the same (also set A to zero) U6: ; Uart ERROR - Can't set proper operating Lcr. JR NZ,U6 ; If we succeed, assume Lcr is Ok. OUT (Ier),A ; Disable all 8250 interrupt conditions (set to 0). IN A,(Ier) AND A U7: ; Uart ERROR - Can't reset Ier. JR NZ,U7 RET eject 1 ; Init the hardware. INIT_HW: CALL SETBAUD ; Set the Uart baud LD A,7 OUT (Lcr),A ; 8 bits, no parity, 2 stop bits XOR A ; Disable all 8250 interrupt conditions. OUT (Ier),A LD A,3 ; Dtr, Rts on. OUT (Mcr),A ; Perform the I/O diagnostic with the controller. ; Wait for data from controller, then echo it back. INITH1: IN A,(Msr) ; Check if controller data ready. BIT InMt,A ; Ready? JR NZ,INITH1 ; Jmp if no. IN A,(Crt) ; Get the data. OUT (Crt),A ; And send it back to controller. RET ; Init the variables. INIT_V: XOR A ; zero A ; Init the Q's LD IX,INBOX ; Init the inbox. LD (IX + Head),A LD (IX + Tail),A LD (IX + Count),A LD HL,INBUF LD (IX + Base),H LD (IX + Status),A LD (IX + UnChar),A LD IX,OUTBOX ; Init the outbox. LD (IX + Head),A LD (IX + Tail),A LD (IX + Count),A LD HL,OUTBUF LD (IX + Base),H LD (IX + Status),A LD (IX + UnChar),A ; Init the H_to_Q variable. LD A,1 LD (H_to_QV),A ; init the 'end of message' stuff LD A,Cr ; default r is a carriage return. LD (EOM_CHAR),A XOR A LD (MESS_LEN),A LD (MESS_CNT),A RET eject 1 ; These routines handle the input and output queues. ; The Q pointer is passed in IX, result/source in A. ; Queues must be 256 bytes long. We use only 8 bit ; arithmetic for Q manipulation. ; A Q is defined as 6 bytes of status: ; Tail Offset for getting next char ; Head Offset for putting next char ; Count Number of chars in q ; Base High byte of the q origin ; Status Status of Q ; UnChar The 'un_get' char if non-zero ; and 256 bytes of storage. ; GETQ: ; Get an element from the Q. ; entry ix = Q pointer ; exit a = result ; ca = set for empty Q, cleared for full Q. ; bc & de are unchanged. ; hl = garbage ; LD A,(IX + UnChar) ; Get the unget char LD (IX + UnChar),0 ; Set the byte to 0 (empty). AND A RET NZ ; Ret if we got an unget char. ; A == 0 here. CP (IX + Count) ; Get the q count SCF RET Z ; empty Q return (Count == 0). DEC (IX + Count) ; one less item in the Q. LD L,(IX + Tail) ; get a pointer to the element in the Q. LD H,(IX + Base) INC (IX + Tail) ; bump the pointer to the next char. OR (HL) ; Get the element, and clear the carry. RET PUTQ: ; Routine to put a char in a Q. ;entry ix = pointer to Q structure. ; a = char to put. ;exit hl = garbage ; a, bc & de unchanged. ; Ca = 1 for Q full, character discarded. ; INC (IX + Count) ; Bump the Q count. QPUT_ERR: JR Z,QPUT_ERR QPUT1: LD H,(IX + Base) LD L,(IX + Head) LD (HL),A ; Put the char in the Q INC (IX + Head) AND A ; Clear the carry bit RET eject 1 ; These routines pack and unpack bytes into Hex ; suitable for sending as ASCII over a serial line. ; H_to_Q takes Hex characters ; and packs them into 8 bit bytes to send to the display. ; B_to_H takes bytes from the display and converts them into ; the Hex character stream. ; ; Both routines use Q calls. IX must be set up with the proper ; Q address. ; ; H_to_Q: ; ; entry A = Ascii Hex char (0-9, a-f) ; IX = Q pointer ; exit A, Hl = Garbage ; bc, de = unchanged. ; Ca = 1 if Q too full. ; CALL H_to_B ; convert the character to binary. LD HL,H_to_QV ; Point hl to our variable BIT 0,(HL) ; check if the upper nibble is full. JR Z,H_SEND ; Jmp if yes. ADD A,A ; Move the nibble to the high 4 bits. ADD A,A ADD A,A ADD A,A LD (HL),A ; Save away the high nibble with low nibble = 0. RET H_SEND: OR (HL) ; Merge in the upper nibble from ram. LD (HL),1 ; Set the variable to empty. JP PUTQ ; Send the byte and return. eject 1 B_to_H: ; B_to_H takes the byte in A and splits it into two hex characters ; to be sent to the Q specified in IX. ; ; Entry A = byte of data to convert to Hex. ; IX = Q address. ; Exit A E Hl = garbage ; D Bc Ix = unchanged. ; LD E,A ; Save the byte RRA ; Move the upper nibble to low nibble. RRA RRA RRA AND 0Fh ; Get only the upper nibble. CP 10 ; 0 thru 9? JR C,B_to_H1 ; Jmp if yes. ADD A,'A'-'0'-10 B_to_H1: ADD A,'0' CALL PUTQ LD A,E ; Get the byte back AND 0Fh ; Mask for only low nibble. CP 10 ; 0 thru 9? JR C,B_to_H2 ; Jmp if yes. ADD A,'A'-'0'-10 B_to_H2: ADD A,'0' JP PUTQ ; Send and return. eject 1 GET_HEX: ; This routine gets two hex characters from the UART and ; munches them into a byte in A. ; Entry: No Params. ; Exit: A=byte H = trash ; all others unchanged (except for flags) IN A,(Lsr) ; Get the line status BIT DataRdy,A ; Data ready from host? JR Z,GET_HEX ; Jmp if no. IN A,(Serial) ; get the data. CALL H_to_B ; convert to binary. ADD A,A ; Shift up 4 bits ADD A,A ADD A,A ADD A,A LD H,A ; Save in B GET_HX1: IN A,(Lsr) ; Get the line status BIT DataRdy,A ; Data ready from host? JR Z,GET_HX1 ; Jmp if no. IN A,(Serial) ; get the data. CALL H_to_B ; convert to binary. OR H RET ; A = 2 input chars munched together. ; Convert hex char to binary. H_to_B: SET 5,A ; convert to lower case. SUB '0' ; less than 0? JR C,HB_ERR ; Jmp if out of bounds. CP 10 ; bigger than 9? RET C ; Ret if no (0..9) SUB 'a'-'0'-10 ; try to make it range 10-15 CP 10 JR C,HB_ERR ; Jmp if out of bounds. CP 16 RET C ; Ret if hex. HB_ERR: XOR A ; Set to zero. RET eject 1 SETBAUD: ; This routine reads the BAUD switches and looks the code ; up in the BTABLE to set the baudrate of the 8250 serial chip. ; ; Entry No parameters ; exit A Hl De = garbage. IN A,(Lcr) ; Set the divisor access bit on OR 80H OUT (Lcr),A IN A,(Baud) ; Get the baud rate code LD (SWTCH),A AND Bmask ; Get only the baud specifier bits. ADD A,A ; Double it to index into table. LD HL,BTABLE ; Index into table to get the divisor LD E,A LD D,0 ADD HL,DE LD A,(HL) ; Get the low order divisor byte OUT (Serial),A INC HL LD A,(HL) ; Get the high divisor byte OUT (Serial+1),A IN A,(Lcr) ; Set the divisor access bit off AND 7FH OUT (Lcr),A RET ; Baud rate look up table ; Only allow 16 entries. BTABLE: WORD 5 ; 38.4 Kbaud WORD 10 ; 19.2 WORD 20 ; 9600 WORD 27 ; 7200 WORD 40 ; 4800 WORD 53 ; 3600 WORD 80 ; 2400 WORD 107 ; 1800 WORD 160 ; 1200 WORD 320 ; 600 WORD 640 ; 300 WORD 1280 ; 150 WORD 1428 ; 134.5 WORD 1745 ; 110 WORD 2560 ; 75 WORD 3840 ; 50 eject 1 ; STRT_IN and STOP_IN are called when the Input Q is may be too full/empty. ; They check and enable/disable the host xmitter apropriately. ; STRT_IN: ; Entry No registers set. ; Exit A Ix Hl = garbage. ; Bc De = unchanged. ; LD IX,INBOX ; Point to the Q. BIT XmitOff,(IX + Status) ; Is it off? RET Z ; ret if no. LD A,40 ; Check if we've gone below low water mark. CP (IX + Count) RET C ; Ret if no, Q still too full. LD A,(SWTCH) ; get the switch settings. BIT Xonbit,A JR Z,STRT_DTR ; Jmp if rs232 modem mode flow control. ; Try to use Xon/Xoff control flow methods. BIT RObit,A ; Raw Output mode? RET NZ ; No way to start/stop host xmitter. LD HL,OUTBOX+UnChar LD A,(HL) ; Anything in unget spot? AND A RET NZ ; Ret if yes. LD (HL),CntrlQ ; 'unget' a control Q. JR STRT_END ; Set DTR bit on. STRT_DTR: IN A,(Mcr) ; get the modem controls. SET DtrOut,A OUT (Mcr),A STRT_END: RES XmitOff,(IX + Status) ; Mark as enabled. RET STOP_IN: ; Entry No registers set. ; Exit A Ix Hl = garbage. ; Bc De = unchanged. ; LD IX,INBOX ; Point to the Q. BIT XmitOff,(IX + Status) ; Already disabled? RET NZ ; ret if yes. LD A,256-40 ; Check if we've gone above high water mark. CP (IX + Count) RET NC ; Ret if no, Q still too empty. LD A,(SWTCH) BIT Xonbit,A ; test for Xon/Xoff vs. modem flow cntrl. JR Z,STP_DTR ; jmp if rs232 modem mode ; try to send an Xoff to the host. BIT RObit,A ; Are we in raw out? RET NZ ; Can't control the host xmitter. LD HL,OUTBOX+UnChar LD A,(HL) ; Anything in unget spot? AND A RET NZ ; Ret if yes. LD (HL),CntrlS ; 'unget' a control S. JR STP_END ; Modem mode flow control, set DTR bit off. STP_DTR: IN A,(Mcr) ; get the modem controls. RES DtrOut,A OUT (Mcr),A STP_END: SET XmitOff,(IX + Status) ; Mark as disabled. RET END SHAR_EOF if test 19313 -ne "`wc -c < 'serial.z'`" then echo shar: error transmitting "'serial.z'" '(should have been 19313 characters)' fi chmod +x 'serial.z' fi # end of overwriting check echo shar: extracting "'serial.hex'" '(2168 characters)' if test -f 'serial.hex' then echo shar: will not over-write existing file "'serial.hex'" else cat << \SHAR_EOF > 'serial.hex' :10000000C30F0073657269616C2E7A20312E38310E :10001000FFFFCD1001CD7F01CD9801DD210BFF3A0F :1000200000FFE6803E11C4F901DB054FDB0647CB3C :10003000612808CD7102CD980118EECD4900CDB0F0 :1000400000CDDB00CDEB0018E0CB41C8DD2105FF82 :100050003A00FF67E640DB002806CDF901C3E20263 :10006000E67FFE20301DFE0D20063E013201FFC955 :10007000CB7CC8210FFFFE132003CBC6C9FE11C0E5 :10008000CB86C9CBEFFE6C200ACD40023202FF3294 :1000900003FFC9FE6D2007CD40023204FFC9FE7385 :1000A0002008CD40022F3200FFC9CD0A02C3E20270 :1000B000CB70C0DD210BFFDD7E02C603D83A00FF06 :1000C000E620DB80C2F901CD20023A02FFA7C82159 :1000D00003FF35C0773A04FFC3F901CB78C8DD21AF :1000E00005FFCDDD01D8D380C3B402CB69C8DD21C3 :1000F0000BFF3A00FFE6802005CB60C8180B3A10D2 :10010000FFA72005DDCB0446C0CDDD01D8D300C953 :10011000DB4047DB40B820FED12100FC06FF4870E1 :1001200005237CB520F92100FC7EA9280C47E60FA9 :1001300028FE78E6F028FE18FE0D237CB520EAD5CF :10014000DB03A720FE3E80D303DB03FE8020FE3EC0 :1001500003D300DB00D60320FED301DB01A720FE82 :10016000DB03D68020FED303DB03A720FE3E07D3AC :1001700003DB03D60720FED301DB01A720FEC9CD98 :1001800071023E07D303AFD3013E03D304DB06CB9A :100190007720FADB80D380C9AFDD2105FFDD770052 :1001A000DD7701DD77022100FCDD7403DD7704DDFE :1001B0007705DD210BFFDD7700DD7701DD7702219B :1001C00000FDDD7403DD7704DD77053E013201FFBC :1001D0003E0D3204FFAF3202FF3203FFC9DD7E0560 :1001E000DD360500A7C0DDBE0237C8DD3502DD6E95 :1001F00001DD6603DD3401B6C9DD340228FEDD66AB :1002000003DD6E0077DD3400A7C9CD5D022101FF5B :10021000CB4628068787878777C9B63601C3F90199 :100220005F1F1F1F1FE60FFE0A3802C607C630CD2C :10023000F9017BE60FFE0A3802C607C630C3F90192 :10024000DB05CB4728FADB00CD5D02878787876710 :10025000DB05CB4728FADB00CD5D02B4C9CBEFD676 :1002600030380CFE0AD8D627FE0A3803FE10D8AF65 :10027000C9DB03F680D303DB403200FFE60F8721A2 :1002800094025F1600197ED300237ED301DB03E6C0 :100290007FD303C905000A0014001B0028003500A5 :1002A00050006B00A0004001800200059405D106BB :1002B000000A000FDD2105FFDDCB0446C83E28DD26 :1002C000BE02D83A00FFCB7F280DCB6FC02110FFB4 :1002D0007EA7C036111806DB04CBC7D304DDCB04E0 :1002E00086C9DD2105FFDDCB0446C03ED8DDBE0258 :1002F000D03A00FFCB7F280DCB6FC02110FF7EA727 :10030000C036131806DB04CB87D304DDCB04C6C983 :0000000000 SHAR_EOF if test 2168 -ne "`wc -c < 'serial.hex'`" then echo shar: error transmitting "'serial.hex'" '(should have been 2168 characters)' fi chmod +x 'serial.hex' fi # end of overwriting check # End of shell archive exit 0