diff options
author | WlodekM <[email protected]> | 2025-04-02 12:23:56 +0300 |
---|---|---|
committer | WlodekM <[email protected]> | 2025-04-02 12:23:56 +0300 |
commit | 1027b91f357eaaa4793b9d16673b0ab662b37c7e (patch) | |
tree | 8625f0aebc48ab32d6d4c3bd5ae92cfbf82c8c08 /pc-thing/code/wozmon.a | |
parent | 0f6d349f9b8d22b3f8d972c5ff19ffb276629bdb (diff) |
remove pc thing
Diffstat (limited to 'pc-thing/code/wozmon.a')
-rw-r--r-- | pc-thing/code/wozmon.a | 160 |
1 files changed, 0 insertions, 160 deletions
diff --git a/pc-thing/code/wozmon.a b/pc-thing/code/wozmon.a deleted file mode 100644 index 5462c4d..0000000 --- a/pc-thing/code/wozmon.a +++ /dev/null @@ -1,160 +0,0 @@ -; The WOZ Monitor for the Apple 1 -; Written by Steve Wozniak in 1976 - - -; Page 0 Variables - -.label XAML 0x24 ; Last "opened" location Low -.label XAMH 0x25 ; Last "opened" location High -.label STL 0x26 ; Store address Low -.label STH 0x27 ; Store address High -.label L 0x28 ; Hex value parsing Low -.label H 0x29 ; Hex value parsing High -.label YSAV 0x2A ; Used to see if hex value is given -.label MODE 0x2B ; $00=XAM, $7F=STOR, $AE=BLOCK XAM - - -; Other Variables - -.label IN 0x0200 ; Input buffer to $027F -.label KBD 0xD010 ; PIA.A keyboard input -.label KBDCR 0xD011 ; PIA.A keyboard control register -.label DSP 0xD012 ; PIA.B display output register -.label DSPCR 0xD013 ; PIA.B display control register - - .org $FF00 - .export RESET - -RESET: ;CLD ; Clear decimal arithmetic mode. - ;CLI - MOV Y 0x7F ; Mask for DSP data direction register. - STY DSP ; Set it up. - MOV A 0xA7 ; KBD and DSP control register mask. - STA KBDCR ; Enable interrupts, set CA1, CB1, for - STA DSPCR ; positive edge sense/output mode. -NOTCR: CMP #'_'+$80 ; "_"? - BEQ BACKSPACE ; Yes. - CMP 0x9B ; ESC? - BEQ ESCAPE ; Yes. - INY ; Advance text index. - BPL NEXTCHAR ; Auto ESC if > 127. -ESCAPE: LD A #'\'+$80 ; "\". - JSR ECHO ; Output it. -GETLINE: LD A 0x8D ; CR. - JSR ECHO ; Output it. - LD Y 0x01 ; Initialize text index. -BACKSPACE: DEY ; Back up text index. - BMI GETLINE ; Beyond start of line, reinitialize. -NEXTCHAR: LD A KBDCR ; Key ready? - BPL NEXTCHAR ; Loop until ready. - LD A KBD ; Load character. B7 should be ‘1’. - STA IN,Y ; Add to text buffer. - JSR ECHO ; Display character. - CMP 0x8D ; CR? - BNE NOTCR ; No. - LD Y 0xFF ; Reset text index. - LD A 0x00 ; For XAM mode. - TAX ; 0->X. -SETSTOR: ASL ; Leaves $7B if setting STOR mode. -SETMODE: STA MODE ; $00=XAM, $7B=STOR, $AE=BLOCK XAM. -BLSKIP: INY ; Advance text index. -NEXTITEM: LD A IN,Y ; Get character. - CMP 0x8D ; CR? - BEQ GETLINE ; Yes, done this line. - CMP #'.'+$80 ; "."? - BCC BLSKIP ; Skip delimiter. - BEQ SETMODE ; Set BLOCK XAM mode. - CMP #':'+$80 ; ":"? - BEQ SETSTOR ; Yes. Set STOR mode. - CMP #'R'+$80 ; "R"? - BEQ RUN ; Yes. Run user program. - STX L ; $00->L. - STX H ; and H. - STY YSAV ; Save Y for comparison. -NEXTHEX: LD A IN,Y ; Get character for hex test. - EOR 0xB0 ; Map digits to $0-9. - CMP 0x0A ; Digit? - BCC DIG ; Yes. - ADC 0x88 ; Map letter "A"-"F" to $FA-FF. - CMP 0xFA ; Hex letter? - BCC NOTHEX ; No, character not hex. -DIG: ASL - ASL ; Hex digit to MSD of A. - ASL - ASL - LD X 0x04 ; Shift count. -HEXSHIFT: ASL ; Hex digit left, MSB to carry. - ROL L ; Rotate into LSD. - ROL H ; Rotate into MSD’s. - DEX ; Done 4 shifts? - BNE HEXSHIFT ; No, loop. - INY ; Advance text index. - BNE NEXTHEX ; Always taken. Check next character for hex. -NOTHEX: CPY YSAV ; Check if L, H empty (no hex digits). - BEQ ESCAPE ; Yes, generate ESC sequence. - BIT MODE ; Test MODE byte. - BVC NOTSTOR ; B6=0 STOR, 1 for XAM and BLOCK XAM - LD A L ; LSD’s of hex data. - STA (STL,X) ; Store at current ‘store index’. - INC STL ; Increment store index. - BNE NEXTITEM ; Get next item. (no carry). - INC STH ; Add carry to ‘store index’ high order. -TONEXTITEM: JMP NEXTITEM ; Get next command item. -RUN: JMP (XAML) ; Run at current XAM index. -NOTSTOR: BMI XAMNEXT ; B7=0 for XAM, 1 for BLOCK XAM. - LD X 0x02 ; Byte count. -SETADR: LD A L-1,X ; Copy hex data to - STA STL-1,X ; ‘store index’. - STA XAML-1,X ; And to ‘XAM index’. - DEX ; Next of 2 bytes. - BNE SETADR ; Loop unless X=0. -NXTPRNT: BNE PRDATA ; NE means no address to print. - LD A 0x8D ; CR. - JSR ECHO ; Output it. - LD A XAMH ; ‘Examine index’ high-order byte. - JSR PRBYTE ; Output it in hex format. - LD A XAML ; Low-order ‘examine index’ byte. - JSR PRBYTE ; Output it in hex format. - LD A #':'+$80 ; ":". - JSR ECHO ; Output it. -PRDATA: LD A 0xA0 ; Blank. - JSR ECHO ; Output it. - LD A (XAML,X) ; Get data byte at ‘examine index’. - JSR PRBYTE ; Output it in hex format. -XAMNEXT: STX MODE ; 0->MODE (XAM mode). - LD A XAML - CMP L ; Compare ‘examine index’ to hex data. - LD A XAMH - SBC H - BCS TONEXTITEM ; Not less, so no more data to output. - INC XAML - BNE MOD8CHK ; Increment ‘examine index’. - INC XAMH -MOD8CHK: LD A XAML ; Check low-order ‘examine index’ byte - AND 0x07 ; For MOD 8=0 - BPL NXTPRNT ; Always taken. -PRBYTE: PHA ; Save A for LSD. - LSR - LSR - LSR ; MSD to LSD position. - LSR - JSR PRHEX ; Output hex digit. - PLA ; Restore A. -PRHEX: AND 0x0F ; Mask LSD for hex print. - ORA #'0'+$80 ; Add "0". - CMP 0xBA ; Digit? - BCC ECHO ; Yes, output it. - ADC 0x06 ; Add offset for letter. -ECHO: BIT DSP ; DA bit (B7) cleared yet? - BMI ECHO ; No, wait for display. - STA DSP ; Output character. Sets DA. - RTS ; Return. - - BRK ; unused - BRK ; unused - -; Interrupt Vectors - - .WORD $0F00 ; NMI - .WORD RESET ; RESET - .WORD $0000 ; BRK/IRQ \ No newline at end of file |