; ; SC84 Machine Code Operating System ; ; 2020-05-10 ; First crack at recreating source code from bytes OCR'd ; from the SC84 newsletter, volume 2 number 1. ; ; Not verified! ; ; Assembles at https://www.asm80.com ; ; The code shows it requires a Mostek Serial Timer Interrupt Controller. ; ; 2022-06-17 ; Renamed to end in .txt (instead of .z80) so it can be read online. ; This requires the following line: .cpu Z80 ; ; null equ 0 space equ 0x20 esc equ 0x1b BEL equ 0x07 BS equ 0x08 FF equ 0x0c LF equ 0x0a CR equ 0x0d DEL equ 0x7F making_original_buggy_version equ 0 ; from Wireless World, October 1984, pages 21-24 and 27 ; CTRL G (BEL) causes a 'beep' ; ; CTRL H (BS) backspaces the cursor one place without deleting. ; ; CTRL J (LF) moves the cursor down one line, scrolling the screen if necessary. ; ; CTRL L (FF) as for LF. ; ; CTRL M (CR) returns the cursor to the leftmost position of the current output line, ; clearing any characters to the right of the original cursor position, ; providing it was not already at the left margin. ; DEL (hex. 07F) backspaces the cursor one position, deleting the character onto which the cursor moves. ; ; VDUA also recognises the following ESCAPE sequences ; (ESCAPE being the hex. character 01 B, decimal 27 or CTRL [). ; ; ESC F selects reverse video display of subsequent ascii codes. ; ESC G selects normal video display of subsequent ascii codes. ; ESC H moves the cursor to the top left corner of the v.d.u. ; ESC J erases from cursor position to end of screen ; ESC K erases from cursor position to end of line ; ; ESC Y I c ; sets the cursor position to line I, column c. ; I and c are single hex. characters equating to ; the desired value plus 01F, ; i.e. the top left corner of the v.d.u. is 020, 020 ; and the bottom left corner (in mode 0) is 03F, 07F. LINE EQU 96 ; VDU chars per line FRAME EQU 32 ; VDU lines per frame VDU1 EQU 0xA000 - LINE + FRAME ; set VDU start ;; CRTH EQU > (VDU1 AND 03FH) ; high byte of VDU start ;; CRTL EQU < VDU1 ; low byte of VDU start CONTRL EQU 0E0H ; set basic port address for I/O port_0xe0 equ CONTRL + 0 port_0xe4 equ CONTRL + 4 port_0xe5 equ CONTRL + 5 port_0xe6 equ CONTRL + 6 port_0xe7 equ CONTRL + 7 port_0xe8 equ CONTRL + 8 ; MK3801 direct ports IDR EQU CONTRL + 010H ; Indirect Data Register GPIP EQU CONTRL + 011H ; General Purpose I/O-Interrupt IPRB EQU CONTRL + 012H ; Interrupt Pending Register B IPRA EQU CONTRL + 013H ; Interrupt Pending Register A ISRB EQU CONTRL + 014H ; Interrupt in-Service Register B ISRA EQU CONTRL + 015H ; Interrupt in-Service Register A IMRB EQU CONTRL + 016H ; Interrupt Mask Register B IMRA EQU CONTRL + 017H ; Interrupt Mask Register A PVR EQU CONTRL + 018H ; Pointer/Vector Register TABCR EQU CONTRL + 019H ; Timers A and B Control Register TBDR EQU CONTRL + 01AH ; Timer B Data Register TADR EQU CONTRL + 01BH ; Timer A Data Register UCR EQU CONTRL + 01CH ; USART Control Register RSR EQU CONTRL + 01DH ; Receiver Status Register TSR EQU CONTRL + 01EH ; Transmitter Status Register UDR EQU CONTRL + 01FH ; USART Data Register ; MK3801 indirect ports SCR EQU 0 ; Sync Character Register TDDR EQU 1 ; Timer D Data Register TCDR EQU 2 ; Timer C Data Register AER EQU 3 ; Active Edge Register IERB EQU 4 ; Interrupt Enable Register IERA EQU 5 ; Interrupt Enable Register DDR EQU 6 ; Data Direction Register TCDCR EQU 7 ; Timer C and D Control Register .org 0x0000 ; 0000 FIRMWARE_SIZE equ 0x07ee CURDRV equ 0xff49 HIGH_ENTRY_POINT equ $f839 ; 0000 21 12 00 ld hl,FIRMWARE_TO_COPY ld de,FIRMWARE_DESTINATION ld bc,FIRMWARE_SIZE ldir ; 000b af xor a ; clear A ld (CURDRV),a ; 000f c3 39 f8 jp HIGH_ENTRY_POINT ; jump into copied code. ; 0012 FIRMWARE_TO_COPY: ; This is actually meant to run at F800, ; so these are just the code bytes expected. ; ; Disassembling these bytes yields ; wrong code and addresses. ; They are here just so that they can ; produce a file that can be compared with ; an original ROM image (if/when one becomes available). ; ; These bytes were disassembled online, using: ; https://onlinedisassembler.com ; and edited to a form acceptable to ; this online assembler: ; https://www.asm80.com ; .phase 0xf800 FIRMWARE_DESTINATION: ; Continue to produce code and data for loading at the current address ; but assemble instructions and define labels ; as if they originated at the given address. ; Useful when producing code that will be copied ; to a different location before being executed. db 0xC3, 0x3D db 0xF8, 0xC3, 0x55, 0xF8 db 0xC3, 0x60, 0xFC, 0xC3 db 0xE6, 0xFB, 0xC3, 0xE0 ; 0020 db 0xFD, 0xC3, 0xE3, 0xFD db 0xC3, 0xCE, 0xFE, 0xC3 db 0xB6, 0xFD, 0xC3, 0xBE db 0xFD, 0xC3, 0x34, 0xFC ; 0030 db 0xC3, 0xDB, 0xFB, 0xC3 db 0x4C, 0xFC, 0xC3, 0xE6 db 0xFD, 0xC3, 0xFC, 0xFD db 0xC3, 0x0D, 0xFE, 0xC3 ; 0040 db 0x9C, 0xFE, 0xC3, 0xCB db 0xFD, 0xC3, 0x54, 0xFC db 0xC3, 0x99, 0xFA, 0x3E db 0xD0, 0xD3, 0xE4, 0x21 ; 0050 db 0x00, 0x00, 0x11, 0x5E db 0xFF, 0x3E, 0x08, 0x36 db 0xC3, 0x23, 0xEB, 0xED db 0xA0, 0xED, 0xA0, 0xEB ; 0060 db 0x01, 0x05, 0x00, 0x09 db 0x3D, 0x20, 0xF0, 0x31 db 0x00, 0x00, 0xCD, 0x4B db 0xFA, 0xFB, 0xCD, 0xE5 ; 0070 db 0xFA, 0xFE, 0x13, 0x28 db 0x0D, 0xFE, 0x04, 0x20 db 0x1C, 0x21, 0x80, 0xF7 db 0xDD, 0x21, 0x73, 0xFF ; definitely 0x73 in scans ; 0080 db 0x18, 0x07, 0x21, 0x80 db 0x00, 0xDD, 0x21, 0x6E db 0xFF, 0xE5, 0xCD, 0x5E db 0xFA, 0xCD, 0xE6, 0xFD ; 0090 db 0x20, 0xFB, 0xC3, 0xFC db 0xFD, 0x47, 0x4F, 0xCD db 0xE5, 0xFA, 0xFE, 0x20 db 0x20, 0xF8, 0x79, 0x81 ; 00A0 db 0x80, 0xFE, 0xD8, 0x20 db 0x1F, 0xCD, 0x76, 0xFB db 0xE5, 0xCD, 0x73, 0xFB db 0xC1, 0xE5, 0xA7, 0xED ; 00B0 db 0x42, 0xE3, 0xC1, 0x2B db 0xCD, 0x7F, 0xFB, 0xE5 db 0xD1, 0x85, 0x6F, 0x30 db 0x01, 0x24, 0xEB, 0xED ; 00C0 db 0xB8, 0xC3, 0x55, 0xF8 db 0xFE, 0xE9, 0x20, 0x1C db 0xCD, 0x76, 0xFB, 0xCD db 0x7F, 0xFB, 0x77, 0xCD ; 00D0 db 0xF4, 0xFA, 0xCD, 0x4B db 0xFA, 0x3A, 0x4E, 0xFF db 0xB7, 0x28, 0xFA, 0xE6 db 0x5F, 0xFE, 0x47, 0x38 ; 00E0 db 0xE7, 0xC3, 0x5C, 0xF8 db 0xFE, 0xD5, 0x20, 0x27 db 0xCD, 0x76, 0xFB, 0xE5 db 0xE5, 0xC1, 0xCD, 0x73 ; 00F0 db 0xFB, 0xED, 0x42, 0xE5 db 0xC1, 0xE1, 0xCD, 0x7F db 0xFB, 0x5F, 0xCD, 0x7F db 0xFB, 0xCD, 0xA5, 0xFB ; 0100 db 0xED, 0xB1, 0xE2, 0x55 db 0xF8, 0x2B, 0x73, 0xF5 db 0xCD, 0xC7, 0xFA, 0x23 db 0xF1, 0x18, 0xF1, 0xFE ; 0110 db 0xF9, 0x20, 0x18, 0xCD db 0x76, 0xFB, 0xE5, 0xCD db 0x73, 0xFB, 0xC1, 0xC5 db 0xA7, 0xED, 0x42, 0xE5 ; 0120 db 0xC1, 0xCD, 0x73, 0xFB db 0xD1, 0xEB, 0xED, 0xB0 db 0xC3, 0x55, 0xF8, 0xFE db 0xDE, 0x20, 0x0B, 0xCD ; 0130 db 0x76, 0xFB, 0x36, 0xFF db 0x2C, 0x20, 0xFB, 0xC3 db 0x55, 0xF8, 0xFE, 0xFC db 0x20, 0x0E, 0x21, 0x00 ; 0140 db 0x00, 0x36, 0xFF, 0x23 db 0x7C, 0xFE, 0xF8, 0x20 db 0xF8, 0xC3, 0x3D, 0xF8 db 0xF5, 0xCD, 0xDA, 0xFA ; 0150 db 0x1B, 0x4A, 0x00, 0xF1 db 0xFE, 0xD4, 0x20, 0x50 db 0xCD, 0x76, 0xFB, 0xCD db 0xA5, 0xFB, 0xE5, 0xCD ; 0160 db 0x38, 0xFB, 0xCD, 0xE5 db 0xFA, 0xFE, 0x5F, 0x20 db 0x22, 0x2B, 0x7D, 0xE6 db 0x0F, 0xFE, 0x0F, 0x20 ; 0170 db 0x07, 0x3E, 0x0D, 0xCD db 0x60, 0xFC, 0x18, 0xE7 db 0xCD, 0x46, 0xFB, 0x3A db 0x47, 0xFF, 0xD6, 0x05 ; 0180 db 0x90, 0x47, 0x3E, 0x7F db 0xCD, 0x60, 0xFC, 0x10 db 0xF9, 0x18, 0xD7, 0xFE db 0x20, 0x28, 0x12, 0xCD ; 0190 db 0x94, 0xFB, 0xCD, 0x85 db 0xFB, 0x77, 0x23, 0xCD db 0x12, 0xFB, 0x20, 0xC6 db 0xCD, 0xA5, 0xFB, 0x18 ; 01A0 db 0xBE, 0xE1, 0xCD, 0xF7 db 0xFA, 0xC3, 0x55, 0xF8 db 0xFE, 0xEE, 0x20, 0x04 db 0xCD, 0x76, 0xFB, 0xE9 ; 01B0 db 0xFE, 0xE3, 0x20, 0x15 db 0xCD, 0x76, 0xFB, 0xE5 db 0xCD, 0x73, 0xFB, 0xCD db 0xA5, 0xFB, 0xD1, 0xEB ; 01C0 db 0x1A, 0xBE, 0xC4, 0xC7 db 0xFA, 0x13, 0x23, 0x18 db 0xF7, 0xFE, 0xCE, 0x20 db 0x52, 0x21, 0xDC, 0xFF ; 01D0 db 0x39, 0xE5, 0x0E, 0x00 db 0x3A, 0x4E, 0xFF, 0xB7 db 0x28, 0xFA, 0xFE, 0x1B db 0x28, 0x08, 0xCD, 0x7F ; 01E0 db 0xFB, 0x77, 0x2B, 0x0C db 0x18, 0xEE, 0xCD, 0x34 db 0xFC, 0x0C, 0x0D, 0xCA db 0x55, 0xF8, 0xCD, 0xA5 ; 01F0 db 0xFB, 0xE1, 0xD9, 0x21 db 0x00, 0x00, 0x01, 0x00 db 0x00, 0xD9, 0x41, 0xE5 db 0xD1, 0x7E, 0xD9, 0xED ; 0200 db 0xB1, 0xE2, 0x55, 0xF8 db 0x20, 0xF9, 0xE5, 0xD9 db 0x1B, 0x1A, 0x10, 0x0B db 0xD9, 0xE1, 0xE5, 0x2B ; 0210 db 0xCD, 0xC7, 0xFA, 0xE1 db 0xD9, 0x18, 0xE3, 0xD9 db 0xED, 0xA1, 0x03, 0x20 db 0xF6, 0x18, 0xE8, 0xFE ; 0220 db 0xF4, 0xCC, 0xEE, 0xFA db 0xC3, 0x55, 0xF8, 0xE5 db 0x21, 0x06, 0x00, 0xF5 db 0x39, 0xF1, 0xE3, 0x08 ; 0230 db 0xF5, 0xD9, 0xC5, 0xD5 db 0xE5, 0xD9, 0x08, 0xF5 db 0xC5, 0xD5, 0xE5, 0xFD db 0xE5, 0xDD, 0xE5, 0x06 ; 0240 db 0x10, 0x11, 0x7A, 0xFF db 0xCD, 0xA5, 0xFB, 0x0E ; not 0x0F at 0247 db 0x03, 0x1A, 0x13, 0xCD db 0xB5, 0xFB, 0x0D, 0x20 ; 0250 db 0xF8, 0xCD, 0x9D, 0xFB db 0xE1, 0xCD, 0x53, 0xFB db 0x10, 0xEA, 0xC3, 0x55 db 0xF8, 0xCD, 0x66, 0xFA ; 0260 db 0xCD, 0xDA, 0xFA, 0x20 db 0x0D, 0x20, 0x52, 0x45 db 0x41, 0x44, 0x59, 0x20 db 0x20, 0x20, 0x00, 0xC9 ; 0270 db 0xCD, 0xDA, 0xFA, 0x1B db 0x48, 0x1B, 0x4A, 0x00 db 0x3E, 0xFF, 0xED, 0x47 db 0xED, 0x5E, 0x3E, 0x14 ; 0280 db 0xCD, 0xB9, 0xFA, 0xF8 db 0x06, 0xF0, 0x02, 0xF1 db 0x02, 0xF8, 0x02, 0xF0 db 0x02, 0xF8, 0x01, 0xF0 ; 0290 db 0x02, 0xF8, 0x07, 0xF0 db 0x11, 0xFC, 0x98, 0xFD db 0x01, 0xFE, 0x01, 0xF8 db 0x03, 0xF0, 0xC0, 0xF7 ; 02A0 db 0xC0, 0xF6, 0x01, 0xF8 db 0x05, 0xF0, 0xC0, 0xF8 db 0x0C, 0xF0, 0x01, 0x21 db 0xE7, 0xFE, 0x11, 0x40 ; 02B0 db 0xFF, 0x01, 0x09, 0x00 db 0xED, 0xB0, 0x11, 0x00 db 0x00, 0x06, 0x10, 0xCD db 0xB6, 0xFD, 0x56, 0xED ; 02C0 db 0x53, 0x00, 0x80, 0x23 db 0x1C, 0x10, 0xF7, 0xCD db 0xBE, 0xFD, 0xC9, 0xE3 db 0xC5, 0x47, 0x4E, 0x23 ; 02D0 db 0x7E, 0x23, 0xED, 0x79 db 0x10, 0xF8, 0xC1, 0xE3 db 0xC9, 0xCD, 0x53, 0xFB db 0x3A, 0x47, 0xFF, 0xFE ; 02E0 db 0x5C, 0xD2, 0xA5, 0xFB db 0xE6, 0x07, 0xC8, 0xCD db 0xA0, 0xFB, 0x18, 0xF0 db 0xE3, 0x7E, 0x23, 0xE3 ; 02F0 db 0xB7, 0xC8, 0xCD, 0x60 db 0xFC, 0x18, 0xF5, 0xCD db 0xB2, 0xFB, 0xFE, 0x60 db 0xD8, 0xD6, 0x20, 0xC9 ; 0300 db 0xCD, 0x76, 0xFB, 0x22 db 0x78, 0xFF, 0x2A, 0x78 db 0xFF, 0xCD, 0xDA, 0xFA db 0x1B, 0x48, 0x00, 0x0E ; 0310 db 0x1F, 0xCD, 0xA5, 0xFB db 0xCD, 0x38, 0xFB, 0xCD db 0x5D, 0xFB, 0x23, 0xCD db 0x12, 0xFB, 0x20, 0xF7 ; 0320 db 0x0D, 0x20, 0xEE, 0xC9 db 0xCD, 0xA0, 0xFB, 0x7D db 0xE6, 0x03, 0xCC, 0x9D db 0xFB, 0x7D, 0xE6, 0x0F ; 0330 db 0xC0, 0x11, 0xF0, 0xFF db 0x19, 0x06, 0x10, 0x7E db 0x23, 0xFE, 0x20, 0x38 db 0x04, 0xFE, 0x7F, 0x38 ; 0340 db 0x02, 0x3E, 0x2E, 0xCD db 0xB5, 0xFB, 0x10, 0xEF db 0xAF, 0xC9, 0xCD, 0x53 db 0xFB, 0xC5, 0xCD, 0x46 ; 0350 db 0xFB, 0xC4, 0xA0, 0xFB db 0x10, 0xFB, 0xC1, 0xC9 db 0x7D, 0xE6, 0x0F, 0xC8 db 0x4F, 0xE6, 0x0C, 0x0F ; 0360 db 0x81, 0x81, 0x81, 0x47 db 0xC9, 0x7C, 0xCD, 0x5E db 0xFB, 0x7D, 0xCD, 0x5E db 0xFB, 0x18, 0x43, 0x7E ; 0370 db 0xF5, 0x07, 0x07, 0x07 db 0x07, 0xCD, 0x67, 0xFB db 0xF1, 0xE6, 0x0F, 0xFE db 0x0A, 0x38, 0x02, 0xC6 ; 0380 db 0x07, 0xC6, 0x30, 0x18 db 0x42, 0xCD, 0xA0, 0xFB db 0xCD, 0x82, 0xFB, 0x67 db 0xCD, 0x82, 0xFB, 0x6F ; 0390 db 0xC9, 0xCD, 0xA0, 0xFB db 0xCD, 0x91, 0xFB, 0xC5 db 0x07, 0x07, 0x07, 0x07 db 0x47, 0xCD, 0x91, 0xFB ; 03A0 db 0x80, 0xC1, 0xC9, 0xCD db 0xB2, 0xFB, 0xFE, 0x41 db 0x38, 0x02, 0xC6, 0x09 db 0xE6, 0x0F, 0xC9, 0xCD ; 03B0 db 0xA0, 0xFB, 0xF5, 0x3E db 0x20, 0x18, 0x08, 0xF5 db 0x3E, 0x0D, 0xCD, 0xB5 db 0xFB, 0x3E, 0x0A, 0xCD ; 03C0 db 0xB5, 0xFB, 0xF1, 0xC9 db 0xCD, 0xE6, 0xFB, 0xCD db 0x60, 0xFC, 0xF5, 0xDB db 0xE0, 0xE6, 0x80, 0x20 ; 03D0 db 0x05, 0xF1, 0xF5, 0xCD db 0xCE, 0xFE, 0xF1, 0xC9 db 0xE3, 0xD5, 0xC5, 0xCD db 0xD0, 0xFB, 0xC1, 0xD1 ; 03E0 db 0xE1, 0xC9, 0xE9, 0xE3 db 0xD5, 0xC5, 0xF5, 0xCD db 0xD0, 0xFB, 0xF1, 0x18 db 0xF1, 0x3A, 0x4E, 0xFF ; 03F0 db 0xFE, 0x1D, 0xC0, 0xCD db 0x34, 0xFC, 0x18, 0x31 db 0xE5, 0x2A, 0x44, 0xFF db 0xCD, 0xB6, 0xFD, 0xCD ; 0400 db 0x20, 0xFD, 0x21, 0x0A db 0x68, 0x22, 0x00, 0x80 db 0xCD, 0xBE, 0xFD, 0xCD db 0x34, 0xFC, 0x28, 0xFB ; 0410 db 0xCD, 0xB6, 0xFD, 0x21 db 0x0A, 0x08, 0x22, 0x00 db 0x80, 0xCD, 0xBE, 0xFD db 0xE1, 0xCD, 0x11, 0xFC ; 0420 db 0x28, 0xD6, 0xC9, 0xCD db 0x25, 0xFC, 0xFE, 0x1D db 0xC0, 0x3A, 0x43, 0xFF db 0xB7, 0x3E, 0x00, 0x20 ; 0430 db 0x01, 0x3C, 0x32, 0x43 db 0xFF, 0xAF, 0xC9, 0xF5 db 0x3A, 0x43, 0xFF, 0xB7 db 0x28, 0x06, 0x3A, 0x42 ; 0440 db 0xFF, 0x32, 0x43, 0xFF db 0xF1, 0xC9, 0x3A, 0x4E db 0xFF, 0xB7, 0xC8, 0xE5 db 0xD5, 0xC5, 0x21, 0x4F ; 0450 db 0xFF, 0xE5, 0xD1, 0x1B db 0x1A, 0x01, 0x0F, 0x00 db 0xED, 0xB0, 0xC1, 0xD1 db 0xE1, 0xC9, 0x3A, 0x4E ; 0460 db 0xFF, 0xB7, 0xC8, 0x3E db 0xFF, 0xC9, 0xF5, 0x3E db 0x6F, 0xE3, 0xE3, 0x3D db 0x20, 0xFB, 0x10, 0xF7 ; 0470 db 0xF1, 0xC9, 0xCD, 0xD1 db 0xFB, 0xCD, 0xB6, 0xFD db 0x01, 0xBE, 0xFD, 0xC5 db 0x21, 0xF1, 0xFC, 0x34 ; 0480 db 0x35, 0x20, 0x08, 0xFE db 0x1B, 0xC2, 0xF4, 0xFC db 0xCB, 0xFE, 0xC9, 0xCB db 0x7E, 0x28, 0x4A, 0x36 ; 0490 db 0x00, 0x32, 0xF2, 0xFC db 0xFE, 0x48, 0x20, 0x09 db 0xCD, 0x25, 0xFC, 0xAF db 0x2A, 0x40, 0xFF, 0x18 ; 04A0 db 0x60, 0xFE, 0x4A, 0x20 db 0x0C, 0x2A, 0x44, 0xFF db 0x3E, 0xA0, 0x36, 0x20 db 0x23, 0xBC, 0x20, 0xFA ; 04B0 db 0xC9, 0xFE, 0x4B, 0x20 db 0x11, 0x2A, 0x44, 0xFF db 0x3A, 0x47, 0xFF, 0xD6 db 0x60, 0x30, 0xFC, 0x36 ; 04C0 db 0x20, 0x23, 0x3C, 0x20 db 0xFA, 0xC9, 0xFE, 0x59 db 0x20, 0x03, 0x36, 0x02 db 0xC9, 0xFE, 0x46, 0x18 ; 04D0 db 0x04, 0xFE, 0x47, 0x20 db 0x04, 0x32, 0xF3, 0xFC db 0xC9, 0xD6, 0x20, 0x4F db 0x3A, 0xF2, 0xFC, 0xFE ; 03E0 db 0x59, 0xC0, 0x35, 0x28 db 0x12, 0x79, 0xFE, 0x20 db 0xD0, 0xAF, 0x2A, 0x40 db 0xFF, 0x11, 0x60, 0x00 ; 04F0 db 0x0C, 0x0D, 0x28, 0x0D db 0x19, 0x18, 0xFA, 0x79 db 0xFE, 0x60, 0xD0, 0x06 db 0x00, 0x2A, 0x44, 0xFF ; 0500 db 0x09, 0x18, 0x29, 0x00 db 0x00, 0x47, 0x2A, 0x44 ; not 0x24 at 0506 db 0xFF, 0xFE, 0x7F, 0x20 db 0x09, 0x36, 0x20, 0x2B ; 0510 db 0x3A, 0x47, 0xFF, 0x3D db 0x18, 0x16, 0xFE, 0x20 db 0x38, 0x24, 0xCD, 0x8E db 0xFD, 0x77, 0x3A, 0xF3 ; 0520 db 0xFC, 0xFE, 0x46, 0x20 db 0x02, 0xCB, 0xFE, 0x23 db 0x3A, 0x47, 0xFF, 0x3C db 0x32, 0x47, 0xFF, 0x22 ; 0530 db 0x44, 0xFF, 0x7D, 0x2E db 0x0E, 0x22, 0x00, 0x80 db 0x2C, 0x67, 0x22, 0x00 db 0x80, 0xC9, 0xFE, 0x08 ; 0540 db 0x28, 0xCD, 0xFE, 0x0D db 0x20, 0x0E, 0x3A, 0x47 db 0xFF, 0xA7, 0xC8, 0xCD db 0xA9, 0xFC, 0x11, 0xA0 ; 0550 db 0xFF, 0x19, 0x18, 0xD8 db 0xFE, 0x07, 0x20, 0x11 db 0x0E, 0x00, 0x3A, 0x49 db 0xFF, 0xEE, 0x02, 0xD3 ; 0560 db 0xE0, 0x06, 0xC0, 0x10 db 0xFE, 0x0D, 0x20, 0xF5 db 0xC9, 0xFE, 0x0C, 0x28 db 0x03, 0xFE, 0x0A, 0xC0 ; 0570 db 0x3A, 0x43, 0xFF, 0xB7 db 0x28, 0x06, 0x3D, 0x28 db 0x0C, 0x32, 0x43, 0xFF db 0x11, 0x60, 0x00, 0x19 ; 0580 db 0xCD, 0x8E, 0xFD, 0x18 db 0xAA, 0x11, 0x0A, 0x40 db 0xED, 0x53, 0x00, 0x80 db 0xCD, 0x4C, 0xFC, 0x28 ; 0590 db 0xFB, 0x11, 0x0A, 0x08 db 0xED, 0x53, 0x00, 0x80 db 0xCD, 0x34, 0xFC, 0xCD db 0x11, 0xFC, 0x18, 0xDC ; 05A0 db 0xF5, 0x7C, 0xFE, 0xA0 db 0x38, 0x20, 0x2A, 0x40 db 0xFF, 0xC5, 0xE5, 0x11 db 0x60, 0x00, 0x19, 0xE5 ; 05B0 db 0xD1, 0x21, 0x00, 0xA0 db 0xA7, 0xED, 0x52, 0xE5 db 0xC1, 0xE1, 0xEB, 0xED db 0xB0, 0xEB, 0xC1, 0xE5 ; 05C0 db 0x36, 0x20, 0x2C, 0x20 db 0xFB, 0xE1, 0xF1, 0xC9 db 0xF5, 0x3A, 0x49, 0xFF db 0xF6, 0x04, 0x18, 0x06 ; 05D0 db 0xF5, 0x3A, 0x49, 0xFF db 0xE6, 0xFB, 0xD3, 0xE0 db 0x32, 0x49, 0xFF, 0xF1 db 0xC9, 0xE5, 0xD5, 0x32 ; 05E0 db 0x42, 0xFF, 0x21, 0x00 db 0xA0, 0x11, 0xA0, 0xFF db 0x19, 0x3D, 0x20, 0xFC db 0x22, 0x40, 0xFF, 0xD1 ; 05F0 db 0xE1, 0xC9, 0xDB, 0xE8 db 0xC9, 0xD3, 0xE8, 0xC9 db 0xCD, 0xC6, 0xFB, 0xCD db 0x28, 0xFE, 0x32, 0x49 ; 0600 db 0xFF, 0xD3, 0xE0, 0x3A db 0x48, 0xFF, 0xE6, 0x0F db 0xCD, 0x7D, 0xFE, 0xE6 db 0x10, 0xC9, 0xCD, 0xC6 ; 0610 db 0xFB, 0x11, 0x84, 0xFE db 0xCD, 0x36, 0xFE, 0x3E db 0x80, 0xCD, 0x7B, 0xFE db 0xE6, 0x1C, 0xC9, 0xCD ; 0620 db 0xC6, 0xFB, 0x11, 0x8A db 0xFE, 0xCD, 0x36, 0xFE db 0x3E, 0xA0, 0xCD, 0x7B db 0xFE, 0xE6, 0x7C, 0xC0 ; 0630 db 0x11, 0x90, 0xFE, 0xCD db 0x02, 0xFE, 0xC8, 0xF6 ; not 0xCB at 0636 db 0x02, 0xC9, 0xDD, 0x7E db 0x00, 0xE6, 0x03, 0x4F ; 0640 db 0x06, 0x00, 0x21, 0x4A db 0xFF, 0x09, 0x7E, 0xC9 db 0xCD, 0x28, 0xFE, 0x47 db 0x21, 0x49, 0xFF, 0xAE ; 0650 db $e6,$f0,$f5,$7e db $e6,$0e,$b0,$77 db $d3,$e0,$f1 ; 065b if 0 ; code in the newsletter volume 1 number 1 db $c4,$6b,$fe ; call nz, call_fe6b db $dd,$46,$01 ; ld b,(ix+1) db $db,$e5 ; in a,($e5) else ; fixed code in the newsletter volume 1 number 3 db $db,$e5 ; in a,($e5) db $c4,$6b,$fe ; call nz, call_fe6b db $dd,$46,$01 ; ld b,(ix+1) endif ; 0663 db $b8 db $78,$d3,$e7,$3a db $48,$ff,$c4,$7d db $fe,$dd,$7e,$02 ; 0670 db 0xD3, 0xE6, 0xDD, 0x6E db 0x03, 0xDD, 0x66, 0x04 db 0xED, 0x53, 0x1E, 0xFF db 0xC9, 0x21, 0x90, 0xFE ; 0680 db 0x22, 0x1E, 0xFF, 0x3E db 0xC0, 0xCD, 0x7D, 0xFE db 0xDB, 0xE6, 0xD3, 0xE5 db 0xC9, 0x0E, 0xE7, 0xD3 ; 0690 db 0xE4, 0x37, 0xDA, 0x80 db 0xFE, 0xC9, 0xED, 0xA2 db 0x37, 0xFB, 0xED, 0x4D db 0xED, 0xA3, 0x37, 0xFB ; 06A0 db 0xED, 0x4D, 0xDB, 0xE7 db 0x37, 0xFB, 0xED, 0x4D db 0xDB, 0xE4, 0xB7, 0xFB db 0xED, 0x4D, 0x32, 0x48 ; 06B0 db 0xFF, 0xC9, 0xF5, 0xDB db 0xE0, 0xE6, 0x7F, 0x20 db 0x0B, 0x3E, 0xD0, 0xD3 db 0xE4, 0xF1, 0x21, 0x3D ; 06C0 db 0xF8, 0xE3, 0x18, 0x19 db 0xE5, 0xC5, 0x21, 0x4D db 0xFF, 0x4F, 0x06, 0x0F db 0xAF, 0x23, 0xBE, 0x28 ; 06D0 db 0x08, 0x10, 0xFA, 0x3E db 0x07, 0xCD, 0x60, 0xFC db 0xFE, 0x71, 0xC1, 0xE1 db 0xF1, 0xFB, 0xED, 0x4D ; 06E0 db 0xF5, 0xDB, 0xF1, 0xCB db 0x57, 0x20, 0xFA, 0xDB db 0xFE, 0xCB, 0x7F, 0x28 db 0xFA, 0xF1, 0xD3, 0xFF ; 06F0 db 0xC9, 0x00, 0x00, 0x00 db 0x00, 0x00, 0x00, 0x00 db 0x00, 0x00, 0x94, 0x20 db 0x20, 0x00, 0x94, 0x00 ; 0700 db 0x00, 0x1B, 0x7F, 0x60 db 0x68, 0x38, 0x21, 0x07 db 0x20, 0x20, 0x50, 0x08 db 0x08, 0x08, 0x14, 0x00 ; 0710 db 0x00, 0x00, 0xA0, 0xFE db 0x00, 0x00, 0x00, 0x00 db 0x00, 0x00, 0x00, 0x00 db 0x00, 0x00, 0x00, 0x00 ; 0720 db 0x00, 0x00, 0x00, 0x00 db 0x00, 0x00, 0x00, 0x00 db 0x00, 0x00, 0x00, 0x00 db 0x00, 0x00, 0x96, 0xFE ; 0730 db 0x00, 0x00, 0x00, 0x00 db 0x00, 0x00, 0x00, 0x00 db 0x00, 0x00, 0x00, 0x00 db 0x00, 0x00, 0x00, 0x00 ; 0740 db 0x00, 0x00, 0x00, 0x00 db 0x00, 0x00, 0x00, 0x00 db 0x00, 0x00, 0x00, 0x00 db 0x00, 0x00, 0x00, 0x00 ; 0750 db 0x00, 0x00, 0x00, 0x00 ; 0754 These next eight bytes get overwritten ; in a live memory dump. db 0x00, 0x00, 0x00, 0x00 db 0x00, 0x00, 0x00, 0x00 db 0x10, 0x20, 0x11, 0x21 ; 0760 db 0x00, 0x00, 0x00, 0x00 db 0x00, 0x00, 0x00, 0x00 db 0x00, 0x00, 0x00, 0x00 db 0x00, 0x00, 0x00, 0x00 ; 0770 db 0x55, 0xF8, 0x00, 0x00 db 0x00, 0x00, 0x00, 0x00 db 0x00, 0x00, 0x00, 0x00 db 0x00, 0x00, 0x15, 0xFA ; 0780 db 0x00, 0x00, 0x01, 0x80 db 0x00, 0x00, 0x00, 0x01 db 0x00, 0xF6 ; 078A These next two bytes get overwritten ; in a live memory dump. db 0x00, 0x00 db 0x49, 0x58, 0x20, 0x49 ; 0790 db 0x59, 0x20, 0x48, 0x4C db 0x20, 0x44, 0x45, 0x20 db 0x42, 0x43, 0x20, 0x41 db 0x46, 0x20, 0x48, 0x4C ; 07A0 db 0x27, 0x44, 0x45, 0x27 db 0x42, 0x43, 0x27, 0x41 db 0x46, 0x27, 0x53, 0x50 db 0x20, 0x41, 0x54, 0x20 ; 07B0 db 0x53, 0x20, 0x20, 0x53 db 0x20, 0x20, 0x53, 0x20 db 0x20, 0x53, 0x20, 0x20 db 0xFF, 0xFF, 0xFF, 0xFF ; ; The ROM data from the newsletter OCR ends here. ; However I shall assume the rest of the boot ROM is blank. ; ; ; 07C0 db 0xFF, 0xFF, 0xFF, 0xFF db 0xFF, 0xFF, 0xFF, 0xFF db 0xFF, 0xFF, 0xFF, 0xFF db 0xFF, 0xFF, 0xFF, 0xFF ; 07D0 db 0xFF, 0xFF, 0xFF, 0xFF db 0xFF, 0xFF, 0xFF, 0xFF db 0xFF, 0xFF, 0xFF, 0xFF db 0xFF, 0xFF, 0xFF, 0xFF ; 07E0 db 0xFF, 0xFF, 0xFF, 0xFF db 0xFF, 0xFF, 0xFF, 0xFF db 0xFF, 0xFF, 0xFF, 0xFF db 0xFF, 0xFF, 0xFF, 0xFF ; 07F0 db 0xFF, 0xFF, 0xFF, 0xFF db 0xFF, 0xFF, 0xFF, 0xFF ; 07F8 db 0xFF, 0xFF, 0xFF, 0xFF db 0xFF, 0xFF, 0xFF, 0xFF .end