-
-
Save ThorstenBr/bdca3bdbefbc47bb3ca9251958f785ac to your computer and use it in GitHub Desktop.
Apple II cassette-scope
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;APPLE II CASSETTE-SCOPE | |
;2017-09 [email protected] | |
;2019-06 [email protected] | |
;SIMPLE 1-CHANNEL DIGITAL SCOPE | |
;USING THE APPLE II CASSETTE PORT | |
;KEYS: | |
;(T)RIGGER ON / OFF | |
;(SPACE) RUN / STOP | |
;(O)NE SHOT TRIGGER ON /OFF | |
;(A)UTO TRIGGER ON / OFF | |
;Any other key quits | |
; VARIABLES | |
POINTER = $06 | |
HGR_BASE = $E6 | |
SAMPLES = $F0 | |
STACK = $100 | |
TRIGGER = $2FF | |
S_SAVE = $2FE | |
X_CORD = $2FD | |
FLIP = $2FC | |
ONESHOT = $2FB | |
AUTOTRIGGER = $2FA | |
; GRAPHICS | |
X0 = 4 | |
Y_HI = 88 | |
Y_LO = 104 | |
BLACK = 0 | |
WHITE = 3 | |
; APPLE I/O REGISTERS | |
KEYBD = $C000 ; READ KEYBOARD (0x80=key pending, ASCII:bits 0-6) | |
KEYBD_STROBE = $C010 ; ACKNOWLEDGE KEYBOARD DATA | |
GAME_STROBE = $C040 ; GAME PIN STROBE | |
TAPEIN = $C060 ; READ TAPE INPUT SIGNAL | |
PAGE1 = $C054 ; GRAPHICS PAGE1 | |
PAGE2 = $C055 ; GRAPHICS PAGE2 | |
; APPLE KERNEL ROUTINES | |
COUT = $FDED ; character out sub | |
CROUT = $FD8E ; CR out sub | |
PRBYTE = $FDDA ; prints hex value of A | |
HOME = $FC58 ; home/clear screen | |
WARM = $FF69 ; back to monitor | |
SETCOLOR = $F6F0 | |
DRAW = $F457 | |
ROM_HGR2 = $F3D4 ; HGR2 | |
HGR = $F3DE ; HGR | |
CLR_HIRES = $F3F2 ; Clear HI-RES screen to Black | |
CLR_HCOLOR = $F3F6 ; Clear HI-RES screen to recent HCOLOR | |
TEXT_MODE = $FB39 ; Set screen to text mode | |
ENDBAS = $80C ; END OF BASIC | |
START: | |
.org ENDBAS | |
JSR CROUT | |
JSR PRINT_TITLE | |
LDA PAGE1 | |
JSR HOME | |
LDA PAGE2 | |
JSR HOME | |
BOOT: JSR ROM_HGR2 | |
JSR GRATICULA | |
JSR CLR_HIRES | |
JSR GRATICULA | |
LDA PAGE2 | |
LDA #$20 | |
STA HGR_BASE | |
JSR CLR_HIRES | |
LDA PAGE1 | |
LDA #$40 | |
STA HGR_BASE | |
JSR CLR_HIRES | |
LDA #$20 | |
STA HGR_BASE | |
LDX #0 | |
STX FLIP | |
STX ONESHOT | |
INX | |
STX TRIGGER | |
STX AUTOTRIGGER | |
STA KEYBD_STROBE ; clear any pending keypress | |
ENTRY: TSX | |
STX S_SAVE | |
ENTRY2: LDX #SAMPLES | |
TXS | |
LDA TRIGGER | |
BEQ NO_EDGE | |
FIND_EDGE: LDX #SAMPLES | |
EDGE1: DEX | |
BEQ NONE | |
LDA TAPEIN | |
BMI EDGE1 | |
PHA | |
LDX #SAMPLES | |
EDGE2: DEX | |
BEQ NONE | |
LDA TAPEIN | |
BPL EDGE2 | |
BMI GO | |
NONE: LDX ONESHOT | |
BEQ NONE2 | |
JMP ENTRY2 | |
NONE2: | |
LDX AUTOTRIGGER | |
BNE NO_EDGE | |
PHA | |
TSX | |
BPL NONE2 | |
JMP REST_S | |
NO_EDGE: | |
;LDA GAME_STROBE | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
GO: PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
LDA TAPEIN | |
PHA | |
REST_S: ;LDA GAME_STROBE | |
LDX S_SAVE | |
TXS | |
PAINT: LDA #X0 | |
STA X_CORD | |
LDA #SAMPLES | |
STA S_SAVE | |
LOOP_PAINT: LDX S_SAVE | |
LDA STACK,X | |
BMI HI | |
LO: | |
LDX #BLACK | |
JSR SETCOLOR | |
LDX X_CORD | |
LDY #0 | |
LDA #Y_HI | |
JSR DRAW | |
LDX #WHITE | |
JSR SETCOLOR | |
LDX X_CORD | |
LDY #0 | |
LDA #Y_LO | |
JSR DRAW | |
JMP NXTSMP | |
HI: | |
LDX #WHITE | |
JSR SETCOLOR | |
LDX X_CORD | |
LDY #0 | |
LDA #Y_HI | |
JSR DRAW | |
LDX #BLACK | |
JSR SETCOLOR | |
LDX X_CORD | |
LDY #0 | |
LDA #Y_LO | |
JSR DRAW | |
NXTSMP: INC X_CORD | |
DEC S_SAVE | |
LDA S_SAVE | |
CMP #$FF | |
BNE LOOP_PAINT | |
LDA FLIP | |
BNE HGR2 | |
LDA PAGE1 | |
LDA #1 | |
STA FLIP | |
LDA #$40 | |
STA HGR_BASE | |
JMP END | |
HGR2: LDA PAGE2 | |
LDA #0 | |
STA FLIP | |
LDA #$20 | |
STA HGR_BASE | |
END: LDA ONESHOT | |
BEQ GETKEY | |
OSHOTW: LDA KEYBD | |
BPL OSHOTW | |
BMI CHECK_KEY | |
GETKEY: LDA KEYBD | |
BMI CHECK_KEY | |
JMP ENTRY | |
CHECK_KEY: | |
KEY_SPACE: STA KEYBD_STROBE | |
CMP #160 ; KEY ' ' - PAUSE | |
BNE KEY_T | |
LDA ONESHOT | |
BNE JMPENTRY0 | |
PAUSE: LDA KEYBD | |
BPL PAUSE | |
STA KEYBD_STROBE | |
JMPENTRY0: JMP ENTRY | |
KEY_T: CMP #212 ; KEY 'T' - TRIGGER | |
BNE KEY_AUTO | |
DEC TRIGGER | |
BEQ JMPENTRY1 | |
KEY22: LDA #1 | |
STA TRIGGER | |
JMPENTRY1: JMP ENTRY | |
KEY_AUTO: CMP #193 ; KEY 'A' - AUTOTRIGGER | |
BNE KEY_O | |
DEC AUTOTRIGGER | |
BEQ JMPENTRY2 | |
LDA #1 | |
STA AUTOTRIGGER | |
JMPENTRY2: JMP ENTRY | |
KEY_O: CMP #207 ; KEY 'O' - ONE SHOT | |
BNE KEY4 | |
DEC ONESHOT | |
BEQ JMPENTRY3 | |
KEY32: LDA #1 | |
STA ONESHOT | |
JMPENTRY3: JMP ENTRY | |
KEY4: CMP #205 ; KEY 'M' - MEASUREMENT | |
BEQ MEASUREMENT_MODE | |
QUIT: STA KEYBD_STROBE | |
LDA PAGE1 | |
JSR TEXT_MODE | |
JSR PRINT_TITLE | |
JMP WARM | |
RTS | |
GRATICULA: RTS | |
MEASUREMENT_MODE: | |
STA KEYBD_STROBE | |
LDA PAGE1 | |
JSR TEXT_MODE | |
CAPTURE_START: | |
LDY #0 | |
PSYNC1: BIT TAPEIN | |
BMI PSYNC1 | |
PSYNC2: BIT TAPEIN | |
BPL PSYNC2 | |
PSYNC: BIT TAPEIN | |
BMI PSYNC | |
PLOOP: INY ; 2 cycles | |
BIT TAPEIN ; 4 cycles | |
BPL PLOOP ; 2 +1 if branch, +1 if in another page | |
TYA | |
BMI PSYNC ; don't show values > 128 | |
JSR PRBYTE | |
JSR CROUT | |
LDA KEYBD | |
BPL CAPTURE_START | |
STA KEYBD_STROBE | |
CMP #160 ; KEY ' ' - PAUSE | |
BEQ WAIT_KEY | |
JMP ENDBAS ; RESTART GRAPHICS MODE | |
WAIT_KEY: LDA KEYBD | |
BPL WAIT_KEY | |
STA KEYBD_STROBE | |
JMP CAPTURE_START | |
PRINT_TITLE: | |
LDA #<TITLE_MSG1 | |
LDY #>TITLE_MSG1 | |
JSR PRINT | |
JSR CROUT | |
LDA #<TITLE_MSG2 | |
LDY #>TITLE_MSG2 | |
JMP PRINT ; RTS/returns from there | |
PRINT: | |
STA POINTER | |
STY POINTER+1 | |
LDY #0 | |
LDA (POINTER),y ; load initial char | |
PRINT1: ORA #$80 | |
JSR COUT | |
INY | |
LDA (POINTER),y | |
BNE PRINT1 | |
RTS | |
TITLE_MSG1: .asciiz "APPLE II CASSETTE-SCOPE" | |
TITLE_MSG2: .asciiz "by JORGE CHAMORRO, THORSTEN BREHM" |
Germany... Still firing up and messing a bit with my very first computer every now and then. An Apple IIe - which still just works, after all these years...
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Very cool! With credits and all! Where are you from, thorsten?