2019-03-05 21:05:41 +00:00
|
|
|
;
|
|
|
|
; main.s
|
|
|
|
; audiotest
|
|
|
|
;
|
|
|
|
; Created by Kris Kennaway on 07/01/2019.
|
|
|
|
; Copyright © 2019 Kris Kennaway. All rights reserved.
|
|
|
|
;
|
|
|
|
|
|
|
|
.include "apple2.inc"
|
|
|
|
|
2019-03-07 15:53:35 +00:00
|
|
|
.org $4000
|
2019-03-05 21:05:41 +00:00
|
|
|
.proc main
|
|
|
|
|
|
|
|
TICK = $c030
|
|
|
|
|
2019-03-07 15:20:43 +00:00
|
|
|
; some dummy addresses in order to pad cycle counts
|
2019-03-05 21:05:41 +00:00
|
|
|
zpdummy = $00
|
|
|
|
dummy = $ffff
|
|
|
|
|
|
|
|
; Write symbol table to object file
|
|
|
|
.DEBUGINFO
|
|
|
|
|
|
|
|
; TCP SOCKET DEMO FOR W5100/UTHERNET II
|
|
|
|
; BY D. FINNIGAN
|
|
|
|
; OCTOBER 2015
|
|
|
|
;
|
|
|
|
; UPDATED 09 JAN 2016 6*
|
|
|
|
; UPDATED 13 FEB 2017, C. TORRENCE
|
|
|
|
; -REMOVED SEPARATE PATH FOR WRAP, ADD DEBUG PRINT
|
|
|
|
|
|
|
|
; SLOT 1 I/O ADDRESSES FOR THE W5100
|
|
|
|
WMODE = $C094
|
|
|
|
WADRH = $C095
|
|
|
|
WADRL = $C096
|
|
|
|
WDATA = $C097
|
|
|
|
|
|
|
|
; W5100 LOCATIONS
|
|
|
|
MACADDR = $0009 ; MAC ADDRESS
|
|
|
|
SRCIP = $000F ; SOURCE IP ADDRESS
|
|
|
|
RMSR = $001A ; RECEIVE BUFFER SIZE
|
|
|
|
|
|
|
|
; SOCKET 0 LOCATIONS
|
|
|
|
|
|
|
|
S0MR = $0400 ; SOCKET 0 MODE REGISTER
|
|
|
|
S0CR = $0401 ; COMMAND REGISTER
|
|
|
|
S0IR = $0402 ; INTERRUPT REGISTER
|
|
|
|
S0SR = $0403 ; STATUS REGISTER
|
|
|
|
S0LOCALPORT = $0404 ; LOCAL PORT
|
|
|
|
S0FORADDR = $040C ; FOREIGN ADDRESS
|
|
|
|
S0FORPORT = $0410 ; FOREIGN PORT
|
|
|
|
S0MSS = $0412 ; MAX SEGMENT SIZE
|
|
|
|
S0PROTO = $0414 ; IP PROTOCOL
|
|
|
|
S0TOS = $0415 ; DS/ECN (FORMER TOS)
|
|
|
|
S0TTL = $0416 ; IP TIME TO LIVE
|
|
|
|
S0TXFSR = $0420 ; TX FREE SIZE REGISTER
|
|
|
|
S0TXRR = $0422 ; TX READ POINTER REGISTER
|
|
|
|
S0TXWR = $0424 ; TX WRITE POINTER REGISTER
|
|
|
|
S0RXRSR = $0426 ; RX RECEIVED SIZE REGISTER
|
|
|
|
S0RXRD = $0428 ; RX READ POINTER REGISTER
|
|
|
|
|
|
|
|
; SOCKET 0 PARAMETERS
|
|
|
|
RXBASE = $6000 ; SOCKET 0 RX BASE ADDR
|
|
|
|
RXMASK = $1FFF ; SOCKET 0 8KB ADDRESS MASK
|
|
|
|
TXBASE = $4000 ; SOCKET 0 TX BASE ADDR
|
|
|
|
TXMASK = RXMASK ; SOCKET 0 TX MASK
|
|
|
|
|
|
|
|
; SOCKET COMMANDS
|
|
|
|
SCOPEN = $01 ; OPEN
|
|
|
|
SCLISTEN = $02 ; LISTEN
|
|
|
|
SCCONNECT = $04 ; CONNECT
|
|
|
|
SCDISCON = $08 ; DISCONNECT
|
|
|
|
SCCLOSE = $10 ; CLOSE
|
|
|
|
SCSEND = $20 ; SEND
|
|
|
|
SCSENDMAC = $21 ; SEND MAC
|
|
|
|
SCSENDKEEP = $22 ; SEND KEEP ALIVE
|
|
|
|
SCRECV = $40 ; RECV
|
|
|
|
|
|
|
|
; SOCKET STATUS
|
|
|
|
STCLOSED = $00
|
|
|
|
STINIT = $13
|
|
|
|
STLISTEN = $14
|
|
|
|
STESTABLISHED = $17
|
|
|
|
STCLOSEWAIT = $1C
|
|
|
|
STUDP = $22
|
|
|
|
STIPRAW = $32
|
|
|
|
STMAXRAW = $42
|
|
|
|
STPPOE = $5F
|
|
|
|
|
|
|
|
; MONITOR SUBROUTINES
|
|
|
|
KBD = $C000
|
|
|
|
KBDSTRB = $C010
|
|
|
|
COUT = $FDED
|
|
|
|
PRBYTE = $FDDA
|
|
|
|
PRNTAX = $F941
|
|
|
|
|
|
|
|
; ZERO-PAGE STORAGE
|
|
|
|
PTR = $06 ; 2 BYTES FOR APPLE BUFFER
|
|
|
|
GETSIZE = $08 ; 2 BYTES FOR RX_RSR
|
|
|
|
GETOFFSET = $0A ; 2 BYTES FOR OFFSET ADDR
|
|
|
|
GETSTARTADR = $0C ; 2 BYTES FOR PHYSICAL ADDR
|
|
|
|
|
|
|
|
hgr = $f3e2
|
|
|
|
gr = $c050
|
|
|
|
text = $c051
|
|
|
|
fullscr = $c052
|
|
|
|
tick = $c030
|
|
|
|
|
|
|
|
; RESET AND CONFIGURE W5100
|
|
|
|
LDA #6 ; 5 RETRIES TO GET CONNECTION
|
|
|
|
STA PTR ; NUMBER OF RETRIES
|
|
|
|
BPL RESET ; ALWAYS TAKEN
|
|
|
|
|
|
|
|
SRCADDR: .byte $C0,$A8,$01,147 ; 192.168.2.5 W5100 IP
|
|
|
|
FADDR: .byte $C0,$A8,$01,15 ; 192.168.2.1 FOREIGN IP
|
|
|
|
FPORT: .byte $4E,$20 ; 20000 FOREIGN PORT
|
|
|
|
MAC: .byte $00,$08,$DC,$01,$02,$03 ; W5100 MAC ADDRESS
|
|
|
|
|
|
|
|
RESET:
|
|
|
|
LDA #$80 ; reset
|
|
|
|
STA WMODE
|
|
|
|
LDA #3 ; CONFIGURE WITH AUTO-INCREMENT
|
|
|
|
STA WMODE
|
|
|
|
|
|
|
|
; ASSIGN MAC ADDRESS
|
|
|
|
LDA #>MACADDR
|
|
|
|
STA WADRH
|
|
|
|
LDA #<MACADDR
|
|
|
|
STA WADRL
|
|
|
|
LDX #0
|
|
|
|
@L1:
|
|
|
|
LDA MAC,X
|
|
|
|
STA WDATA ; USING AUTO-INCREMENT
|
|
|
|
INX
|
|
|
|
CPX #6 ;COMPLETED?
|
|
|
|
BNE @L1
|
|
|
|
|
|
|
|
; ASSIGN A SOURCE IP ADDRESS
|
|
|
|
LDA #<SRCIP
|
|
|
|
STA WADRL
|
|
|
|
LDX #0
|
|
|
|
@L2:
|
|
|
|
LDA SRCADDR,X
|
|
|
|
STA WDATA
|
|
|
|
INX
|
|
|
|
CPX #4
|
|
|
|
BNE @L2
|
|
|
|
|
|
|
|
;CONFIGURE BUFFER SIZES
|
|
|
|
|
|
|
|
LDA #<RMSR
|
|
|
|
STA WADRL
|
|
|
|
LDA #3 ; 8KB TO SOCKET 0
|
|
|
|
STA WDATA ; SET RECEIVE BUFFER
|
|
|
|
STA WDATA ; SET TRANSMIT BUFFER
|
|
|
|
|
|
|
|
; CONFIGRE SOCKET 0 FOR TCP
|
|
|
|
|
|
|
|
LDA #>S0MR
|
|
|
|
STA WADRH
|
|
|
|
LDA #<S0MR
|
|
|
|
STA WADRL
|
|
|
|
LDA #$21 ; TCP MODE | !DELAYED_ACK
|
|
|
|
STA WDATA
|
|
|
|
|
|
|
|
; SET LOCAL PORT NUMBER
|
|
|
|
|
|
|
|
LDA #<S0LOCALPORT
|
|
|
|
STA WADRL
|
|
|
|
LDA #$C0 ; HIGH BYTE OF LOCAL PORT
|
|
|
|
STA WDATA
|
|
|
|
LDA #0 ; LOW BYTE
|
|
|
|
STA WDATA
|
|
|
|
|
|
|
|
; SET FOREIGN ADDRESS
|
|
|
|
LDA #<S0FORADDR
|
|
|
|
STA WADRL
|
|
|
|
LDX #0
|
|
|
|
@L3:
|
|
|
|
LDA FADDR,X
|
|
|
|
STA WDATA
|
|
|
|
INX
|
|
|
|
CPX #4
|
|
|
|
BNE @L3
|
|
|
|
|
|
|
|
; SET FOREIGN PORT
|
|
|
|
LDA FPORT ; HIGH BYTE OF FOREIGN PORT
|
|
|
|
STA WDATA ; ADDR PTR IS AT FOREIGN PORT
|
|
|
|
LDA FPORT+1 ; LOW BYTE OF PORT
|
|
|
|
STA WDATA
|
|
|
|
|
|
|
|
; OPEN SOCKET
|
|
|
|
LDA #<S0CR
|
|
|
|
STA WADRL
|
|
|
|
LDA #SCOPEN ;OPEN COMMAND
|
|
|
|
STA WDATA
|
|
|
|
|
|
|
|
; CHECK STATUS REGISTER TO SEE IF SUCCEEDED
|
|
|
|
LDA #<S0SR
|
|
|
|
STA WADRL
|
|
|
|
LDA WDATA
|
|
|
|
CMP #STINIT ; IS IT SOCK_INIT?
|
|
|
|
BEQ OPENED
|
|
|
|
LDY #0
|
|
|
|
@L4:
|
|
|
|
LDA @SOCKERR,Y
|
|
|
|
BEQ @LDONE
|
|
|
|
JSR COUT
|
|
|
|
INY
|
|
|
|
BNE @L4
|
|
|
|
@LDONE: BRK
|
|
|
|
@SOCKERR: .byte $d5,$d4,$c8,$c5,$d2,$ce,$c5,$d4,$a0,$c9,$c9,$ba,$a0,$c3,$cf,$d5,$cc,$c4,$a0,$ce,$cf,$d4,$a0,$cf,$d0,$c5,$ce,$a0,$d3,$cf,$c3,$cb,$c5,$d4,$a1
|
|
|
|
; "UTHERNET II: COULD NOT OPEN SOCKET!"
|
|
|
|
.byte $8D,$00 ; cr+null
|
|
|
|
|
|
|
|
; TCP SOCKET WAITING FOR NEXT COMMAND
|
|
|
|
OPENED:
|
|
|
|
LDA #<S0CR
|
|
|
|
STA WADRL
|
|
|
|
LDA #SCCONNECT
|
|
|
|
STA WDATA
|
|
|
|
|
|
|
|
; WAIT FOR TCP TO CONNECT AND BECOME ESTABLISHED
|
|
|
|
|
|
|
|
CHECKTEST:
|
|
|
|
LDA #<S0SR
|
|
|
|
STA WADRL
|
|
|
|
LDA WDATA ; GET SOCKET STATUS
|
|
|
|
BEQ FAILED ; 0 = SOCKET CLOSED, ERROR
|
|
|
|
CMP #STESTABLISHED
|
|
|
|
BEQ SETUP ; SUCCESS
|
|
|
|
BNE CHECKTEST
|
|
|
|
|
|
|
|
FAILED:
|
|
|
|
DEC PTR
|
|
|
|
BEQ ERRDONE ; TOO MANY FAILURES
|
|
|
|
LDA #$AE ; "."
|
|
|
|
JSR COUT
|
|
|
|
JMP RESET ; TRY AGAIN
|
|
|
|
|
|
|
|
ERRDONE:
|
|
|
|
LDY #0
|
|
|
|
@L:
|
|
|
|
LDA ERRMSG,Y
|
|
|
|
BEQ @DONE
|
|
|
|
JSR COUT
|
|
|
|
INY
|
|
|
|
BNE @L
|
|
|
|
@DONE: BRK
|
|
|
|
|
|
|
|
ERRMSG: .byte $d3,$cf,$c3,$cb,$c5,$d4,$a0,$c3,$cf,$d5,$cc,$c4,$a0,$ce,$cf,$d4,$a0,$c3,$cf,$ce,$ce,$c5,$c3,$d4,$a0,$ad,$a0,$c3,$c8,$c5,$c3,$cb,$a0,$d2,$c5,$cd,$cf,$d4,$c5,$a0,$c8,$cf,$d3,$d4
|
|
|
|
; "SOCKET COULD NOT CONNECT - CHECK REMOTE HOST"
|
|
|
|
.byte $8D,$00
|
|
|
|
|
|
|
|
SETUP:
|
|
|
|
|
|
|
|
; SET BUFFER ADDRESS ON APPLE
|
|
|
|
; LDA #0 ; LOW BYTE OF BUFFER
|
|
|
|
; STA PTR
|
|
|
|
; LDA #$50 ; HIGH BYTE
|
|
|
|
; STA PTR+1
|
|
|
|
|
|
|
|
; init graphics
|
|
|
|
; default content value
|
|
|
|
LDA #$7f
|
|
|
|
PHA
|
|
|
|
|
|
|
|
JSR hgr
|
|
|
|
STA fullscr
|
|
|
|
|
|
|
|
; CHECK FOR ANY RECEIVED DATA
|
|
|
|
|
|
|
|
CHECKRECV:
|
|
|
|
; BIT KBD ; KEYPRESS?
|
|
|
|
; BPL @NEXT
|
|
|
|
; LDA KBDSTRB
|
|
|
|
; JMP CLOSECONN ; CLOSE CONNECTION
|
|
|
|
|
|
|
|
;@NEXT:
|
|
|
|
BIT tick
|
|
|
|
|
|
|
|
LDA #<S0RXRSR ; S0 RECEIVED SIZE REGISTER
|
|
|
|
STA WADRL
|
|
|
|
LDA WDATA ; HIGH BYTE OF RECEIVED SIZE
|
|
|
|
ORA WDATA ; LOW BYTE
|
|
|
|
BEQ NORECV ; NO DATA TO READ
|
|
|
|
|
|
|
|
JMP RECV ; THERE IS DATA
|
|
|
|
|
|
|
|
NORECV:
|
|
|
|
; XXX needed?
|
|
|
|
NOP ; LITTLE DELAY ...
|
|
|
|
NOP
|
|
|
|
|
|
|
|
|
|
|
|
JMP CHECKRECV ; CHECK AGAIN
|
|
|
|
|
|
|
|
; THERE IS DATA TO READ - COMPUTE THE PHYSICAL ADDRESS
|
|
|
|
|
|
|
|
RECV:
|
|
|
|
LDA #<S0RXRSR ; GET RECEIVED SIZE AGAIN
|
|
|
|
STA WADRL
|
|
|
|
LDA WDATA
|
|
|
|
BIT tick
|
|
|
|
|
|
|
|
CMP #$10 ; expect at least 4k
|
|
|
|
bcc CHECKRECV ; not yet
|
|
|
|
|
|
|
|
STA GETSIZE+1
|
|
|
|
LDA WDATA
|
|
|
|
STA GETSIZE ; low byte XXX should be 0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
;jsr DEBUG
|
|
|
|
|
|
|
|
; reset address pointer to socket buffer
|
|
|
|
; CALCULATE OFFSET ADDRESS USING READ POINTER AND RX MASK
|
|
|
|
LDA #<S0RXRD
|
|
|
|
STA WADRL
|
|
|
|
|
|
|
|
LDA WDATA ; HIGH BYTE
|
|
|
|
AND #>RXMASK
|
|
|
|
STA GETOFFSET+1
|
|
|
|
LDA WDATA ; LOW BYTE
|
|
|
|
; why is this not 0?
|
|
|
|
;BEQ @L ; XXX assert 0
|
|
|
|
;BRK
|
|
|
|
@L:
|
|
|
|
AND #<RXMASK
|
|
|
|
|
|
|
|
STA GETOFFSET
|
|
|
|
|
|
|
|
|
|
|
|
; CALCULATE PHYSICAL ADDRESS WITHIN W5100 RX BUFFER
|
|
|
|
BIT tick
|
|
|
|
|
|
|
|
CLC
|
|
|
|
LDA GETOFFSET
|
|
|
|
ADC #<RXBASE
|
|
|
|
STA GETSTARTADR
|
|
|
|
|
|
|
|
|
|
|
|
LDA GETOFFSET+1
|
|
|
|
ADC #>RXBASE
|
|
|
|
STA GETSTARTADR+1
|
|
|
|
|
|
|
|
; SET BUFFER ADDRESS ON W5100
|
|
|
|
;JSR DEBUG ; UNCOMMENT FOR W5100 DEBUG INFO
|
|
|
|
LDA GETSTARTADR+1 ; HIGH BYTE FIRST
|
|
|
|
STA WADRH
|
|
|
|
|
|
|
|
LDA GETSTARTADR
|
|
|
|
STA WADRL
|
|
|
|
|
|
|
|
; restore content
|
|
|
|
PLA
|
|
|
|
; fall through
|
|
|
|
LDX #$00
|
2019-03-07 15:20:43 +00:00
|
|
|
|
2019-03-05 21:05:41 +00:00
|
|
|
;4 stores:
|
|
|
|
;- 73 cycles
|
|
|
|
;- 14364 Hz
|
|
|
|
;- 57456 stores/sec
|
|
|
|
;- 7.5 full screen frames/sec
|
|
|
|
;- 4 .. 70 opcodes = 32 opcodes/page
|
|
|
|
;- 5 bit DAC
|
|
|
|
;- 53 bytes/opcode
|
|
|
|
;- 53*32*32 = 54272 bytes. Just enough to fit in AUX?
|
|
|
|
;- 0x800..0x1fff, 0x4000...0xffff = 55294 bytes
|
|
|
|
|
|
|
|
; XXX should fall through to op_tick_36? Since this is the 50% duty cycle case
|
|
|
|
|
|
|
|
op_nop:
|
|
|
|
LDY WDATA
|
|
|
|
STY @D+2
|
|
|
|
LDY WDATA
|
|
|
|
STY @D+1
|
|
|
|
@D:
|
|
|
|
JMP op_nop
|
|
|
|
|
2019-03-07 15:20:43 +00:00
|
|
|
.macro ticklabel page, cycles_left
|
|
|
|
.concat ("_op_tick_page_", .string(page), "_tail_", .string(cycles_left))
|
|
|
|
.endmacro
|
|
|
|
|
|
|
|
.macro tickident page, cycles_left
|
|
|
|
.ident (.concat ("_op_tick_page_", .string(page), "_tail_", .string(cycles_left))):
|
|
|
|
.endmacro
|
|
|
|
|
|
|
|
.macro op_tick_4 page
|
2019-03-05 21:05:41 +00:00
|
|
|
;4+(4)+2+4+4+4+5+4+5+4+5+4+5+4+4+4+4+3=73
|
2019-03-07 15:20:43 +00:00
|
|
|
.ident (.concat ("op_tick_4_page_", .string(page))):
|
2019-03-05 21:05:41 +00:00
|
|
|
BIT tick ; 4
|
|
|
|
BIT tick ; 4
|
|
|
|
|
2019-03-05 22:22:35 +00:00
|
|
|
STA zpdummy ; 3
|
|
|
|
STA zpdummy ; 3
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-05 22:22:35 +00:00
|
|
|
; load content byte
|
2019-03-07 15:20:43 +00:00
|
|
|
tickident page, 59
|
2019-03-05 21:05:41 +00:00
|
|
|
LDA WDATA ; 4
|
|
|
|
|
2019-03-05 22:22:35 +00:00
|
|
|
; 4 x offset stores
|
2019-03-07 15:20:43 +00:00
|
|
|
tickident page, 55
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
tickident page, 51
|
|
|
|
STA page << 8,Y ; 5
|
|
|
|
tickident page, 46
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
tickident page, 42
|
|
|
|
STA page << 8,Y ; 5
|
|
|
|
tickident page, 37
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
tickident page, 33
|
|
|
|
STA page << 8,Y ; 5
|
|
|
|
tickident page, 28
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
tickident page, 24
|
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-05 22:22:35 +00:00
|
|
|
; vector to next opcode
|
2019-03-07 15:20:43 +00:00
|
|
|
tickident page, 19
|
2019-03-05 22:22:35 +00:00
|
|
|
LDA WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
tickident page, 15
|
|
|
|
STA .ident(.concat ("_op_tick_4_page_", .string(page), "_jmp"))+2 ; 4
|
|
|
|
tickident page, 11
|
2019-03-05 22:22:35 +00:00
|
|
|
LDA WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
tickident page, 7
|
|
|
|
STA .ident(.concat ("_op_tick_4_page_", .string(page), "_jmp"))+1 ; 4
|
|
|
|
.ident(.concat ("_op_tick_4_page_", .string(page), "_jmp")):
|
2019-03-05 21:05:41 +00:00
|
|
|
JMP op_nop ; 3
|
2019-03-07 15:20:43 +00:00
|
|
|
.endmacro
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-07 15:20:43 +00:00
|
|
|
.macro op_tick_6 page
|
|
|
|
.ident (.concat ("op_tick_6_page_", .string(page))):
|
2019-03-05 22:22:35 +00:00
|
|
|
;4+(2+4)+3+4+4+5+4+5+4+5+4+5+4+4+4+5+3
|
2019-03-07 15:20:43 +00:00
|
|
|
|
2019-03-05 21:05:41 +00:00
|
|
|
BIT tick ; 4
|
|
|
|
NOP ; 2
|
|
|
|
BIT tick ; 4
|
|
|
|
|
2019-03-05 22:22:35 +00:00
|
|
|
STA zpdummy ; 3
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-07 15:20:43 +00:00
|
|
|
tickident page, 60
|
2019-03-05 21:05:41 +00:00
|
|
|
LDA WDATA ; 4
|
|
|
|
|
2019-03-07 15:20:43 +00:00
|
|
|
tickident page, 56
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
tickident page, 52
|
|
|
|
STA page << 8,Y ; 5
|
|
|
|
tickident page, 47
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
tickident page, 43
|
|
|
|
STA page << 8,Y ; 5
|
|
|
|
tickident page, 38
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
tickident page, 34
|
|
|
|
STA page << 8,Y ; 5
|
|
|
|
tickident page, 29
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
tickident page, 25
|
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-07 15:20:43 +00:00
|
|
|
tickident page, 20
|
2019-03-05 22:22:35 +00:00
|
|
|
LDA WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
tickident page, 16
|
|
|
|
STA .ident(.concat ("_op_tick_6_page_", .string(page), "_jmp"))+2 ; 4
|
|
|
|
tickident page, 12
|
2019-03-05 22:22:35 +00:00
|
|
|
LDA WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
tickident page, 8
|
2019-03-05 23:20:17 +00:00
|
|
|
; NB: we use ,X indexing here to get an extra cycle. This requires us to
|
|
|
|
; maintain the invariant X=0 across opcode dispatch
|
2019-03-07 15:20:43 +00:00
|
|
|
STA .ident(.concat ("_op_tick_6_page_", .string(page), "_jmp"))+1,x ; 5
|
|
|
|
|
|
|
|
.ident (.concat ("_op_tick_6_page_", .string(page), "_jmp")):
|
2019-03-05 21:05:41 +00:00
|
|
|
JMP op_nop ; 3
|
2019-03-07 15:20:43 +00:00
|
|
|
.endmacro
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-07 15:20:43 +00:00
|
|
|
.macro op_tick_8 page
|
2019-03-05 22:22:35 +00:00
|
|
|
;4+(4+4)+3+3+55
|
2019-03-07 15:20:43 +00:00
|
|
|
.ident (.concat ("op_tick_8_page_", .string(page))):
|
2019-03-05 21:05:41 +00:00
|
|
|
BIT tick ; 4
|
|
|
|
LDA WDATA ; 4
|
|
|
|
BIT tick ; 4
|
|
|
|
|
2019-03-05 22:22:35 +00:00
|
|
|
STA zpdummy ; 3
|
2019-03-07 15:20:43 +00:00
|
|
|
JMP .ident(.concat("_op_tick_page_", .string(page), "_tail_55")) ; 3 + 55
|
|
|
|
.endmacro
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-07 15:20:43 +00:00
|
|
|
.macro op_tick_10 page
|
2019-03-05 22:22:35 +00:00
|
|
|
;4+(4+2+4)+3+56
|
2019-03-07 15:20:43 +00:00
|
|
|
.ident (.concat ("op_tick_10_page_", .string(page))):
|
2019-03-05 21:05:41 +00:00
|
|
|
BIT tick ; 4
|
|
|
|
LDA WDATA ; 4
|
|
|
|
NOP ; 2
|
|
|
|
BIT tick ; 4
|
2019-03-05 22:22:35 +00:00
|
|
|
|
2019-03-07 15:20:43 +00:00
|
|
|
JMP .ident(.concat("_op_tick_page_", .string(page), "_tail_56")) ; 3 + 56
|
|
|
|
.endmacro
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-07 15:20:43 +00:00
|
|
|
.macro op_tick_12 page
|
2019-03-05 22:22:35 +00:00
|
|
|
;4+(4+4+4)+3+3+51
|
2019-03-07 15:20:43 +00:00
|
|
|
.ident (.concat ("op_tick_12_page_", .string(page))):
|
2019-03-05 21:05:41 +00:00
|
|
|
BIT tick ; 4
|
|
|
|
LDA WDATA ; 4
|
|
|
|
LDY WDATA ; 4
|
|
|
|
BIT tick ; 4
|
|
|
|
|
2019-03-05 22:22:35 +00:00
|
|
|
STA zpdummy ; 3
|
2019-03-07 15:20:43 +00:00
|
|
|
JMP .ident(.concat("_op_tick_page_", .string(page), "_tail_51")) ; 3 + 51
|
|
|
|
.endmacro
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-07 15:20:43 +00:00
|
|
|
.macro op_tick_14 page
|
|
|
|
.ident (.concat ("op_tick_14_page_", .string(page))):
|
2019-03-05 22:44:39 +00:00
|
|
|
;4+(4+4+2+4)+3+52
|
2019-03-05 21:05:41 +00:00
|
|
|
BIT tick ; 4
|
|
|
|
LDA WDATA ; 4
|
|
|
|
LDY WDATA ; 4
|
|
|
|
NOP ; 2
|
|
|
|
BIT tick ; 4
|
2019-03-05 22:22:35 +00:00
|
|
|
|
2019-03-07 15:20:43 +00:00
|
|
|
JMP .ident(.concat("_op_tick_page_", .string(page), "_tail_52")) ; 3+52
|
|
|
|
.endmacro
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-07 15:20:43 +00:00
|
|
|
.macro op_tick_16 page
|
|
|
|
.ident (.concat ("op_tick_16_page_", .string(page))):
|
2019-03-05 23:20:17 +00:00
|
|
|
; 4+(4+4+4+4)+5+2+3+43
|
2019-03-05 21:05:41 +00:00
|
|
|
BIT tick ; 4
|
|
|
|
LDA WDATA ; 4
|
2019-03-05 23:20:17 +00:00
|
|
|
; This lets us share a common opcode tail; otherwise we need a STA dummy 4-cycle opcode
|
|
|
|
; which doesn't leave enough to JMP with.
|
|
|
|
; This temporarily violates X=0 invariant required by tick_6
|
|
|
|
LDX WDATA ; 4
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
|
|
|
BIT tick ; 4
|
2019-03-05 23:20:17 +00:00
|
|
|
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,x ; 5
|
2019-03-05 23:20:17 +00:00
|
|
|
LDX #$00 ; 2 restore X=0 invariant
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-07 15:20:43 +00:00
|
|
|
JMP .ident(.concat("_op_tick_page_", .string(page), "_tail_43")) ; 3 + 43
|
|
|
|
.endmacro
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-07 15:20:43 +00:00
|
|
|
.macro op_tick_18 page
|
|
|
|
.ident (.concat ("op_tick_18_page_", .string(page))):
|
2019-03-05 23:20:17 +00:00
|
|
|
; 4 + (4+4+4+2+4)+5+5+2+2+4+5+4+5+4+4+4+4+3
|
|
|
|
BIT tick ; 4
|
|
|
|
LDA WDATA ; 4
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
; lets us reorder the 5-cycle STA page << 8,y outside of tick loop.
|
2019-03-05 23:20:17 +00:00
|
|
|
; This temporarily violates X=0 invariant required by tick_6
|
|
|
|
LDX WDATA ; 4
|
|
|
|
NOP ; 2
|
|
|
|
BIT tick ; 4
|
|
|
|
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
|
|
|
STA page << 8,X ; 5
|
2019-03-05 23:20:17 +00:00
|
|
|
|
|
|
|
LDX #$00 ; 2 restore X=0 invariant
|
|
|
|
|
|
|
|
; used >3 pad cycles within tick loop; can't branch to tail
|
|
|
|
NOP ; 2
|
|
|
|
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-05 23:20:17 +00:00
|
|
|
; vector to next opcode
|
2019-03-05 22:22:35 +00:00
|
|
|
LDA WDATA ; 4
|
|
|
|
STA @D+2 ; 4
|
|
|
|
LDA WDATA ; 4
|
|
|
|
STA @D+1 ; 4
|
2019-03-05 21:05:41 +00:00
|
|
|
@D:
|
|
|
|
JMP op_nop ; 3
|
2019-03-07 15:20:43 +00:00
|
|
|
.endmacro
|
|
|
|
|
|
|
|
.macro op_tick_20 page
|
|
|
|
.ident (.concat ("op_tick_20_page_", .string(page))):
|
2019-03-05 22:22:35 +00:00
|
|
|
;4+(4+4+5+3+4)+3+46=73
|
2019-03-05 21:05:41 +00:00
|
|
|
BIT tick ; 4
|
|
|
|
LDA WDATA ; 4
|
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 22:22:35 +00:00
|
|
|
STA zpdummy ; 3
|
|
|
|
BIT tick ; 4
|
|
|
|
|
2019-03-07 15:20:43 +00:00
|
|
|
JMP .ident(.concat("_op_tick_page_", .string(page), "_tail_46"))
|
|
|
|
.endmacro
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-07 15:20:43 +00:00
|
|
|
.macro op_tick_22 page
|
|
|
|
.ident (.concat ("op_tick_22_page_", .string(page))):
|
|
|
|
; 4+(4+4+5+4+4)+3+3+42 XXX really tick_21
|
2019-03-05 21:05:41 +00:00
|
|
|
BIT tick ; 4
|
|
|
|
LDA WDATA ; 4
|
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-05 23:20:17 +00:00
|
|
|
BIT tick ; 4
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-05 22:44:39 +00:00
|
|
|
STA zpdummy ; 3
|
2019-03-07 15:20:43 +00:00
|
|
|
JMP .ident(.concat("_op_tick_page_", .string(page), "_tail_42")) ; 3 + 42
|
|
|
|
.endmacro
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-07 15:20:43 +00:00
|
|
|
.macro op_tick_24 page
|
|
|
|
.ident (.concat ("op_tick_24_page_", .string(page))):
|
2019-03-05 22:22:35 +00:00
|
|
|
;4+(4+4+5+4+3+4)+3+42
|
2019-03-05 21:05:41 +00:00
|
|
|
BIT tick ; 4
|
|
|
|
LDA WDATA ; 4
|
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-05 22:22:35 +00:00
|
|
|
STA zpdummy ; 3
|
|
|
|
BIT tick ; 4
|
|
|
|
|
2019-03-07 15:20:43 +00:00
|
|
|
JMP .ident(.concat("_op_tick_page_", .string(page), "_tail_42"))
|
|
|
|
.endmacro
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-07 15:20:43 +00:00
|
|
|
.macro op_tick_26 page ; repeats from op_tick_8
|
|
|
|
.ident (.concat ("op_tick_26_page_", .string(page))):
|
2019-03-05 22:22:35 +00:00
|
|
|
; 4+(4+4+5+4+5+4)+3+37
|
2019-03-05 21:05:41 +00:00
|
|
|
BIT tick ; 4
|
|
|
|
LDA WDATA ; 4
|
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
BIT tick; 4
|
|
|
|
|
2019-03-05 22:22:35 +00:00
|
|
|
STA zpdummy ; 3
|
2019-03-07 15:20:43 +00:00
|
|
|
JMP .ident(.concat("_op_tick_page_", .string(page), "_tail_37")) ; 3 + 37
|
|
|
|
.endmacro
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-07 15:20:43 +00:00
|
|
|
.macro op_tick_28 page ; repeats from op_tick_10
|
|
|
|
.ident (.concat ("op_tick_28_page_", .string(page))):
|
2019-03-05 22:22:35 +00:00
|
|
|
; 4+(4+2+4+5+4+5+4)+3+38
|
2019-03-05 21:05:41 +00:00
|
|
|
BIT tick ; 4
|
|
|
|
LDA WDATA ; 4
|
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 22:22:35 +00:00
|
|
|
NOP ; 2
|
2019-03-05 21:05:41 +00:00
|
|
|
BIT tick ; 4
|
|
|
|
|
2019-03-07 15:20:43 +00:00
|
|
|
JMP .ident(.concat("_op_tick_page_", .string(page), "_tail_38"))
|
|
|
|
.endmacro
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-07 15:20:43 +00:00
|
|
|
.macro op_tick_30 page ; repeats from op_tick_12
|
|
|
|
.ident (.concat ("op_tick_30_page_", .string(page))):
|
2019-03-05 22:22:35 +00:00
|
|
|
;4+(4+4+5+4+5+4+4)+3+3+33
|
2019-03-05 21:05:41 +00:00
|
|
|
BIT tick ; 4
|
|
|
|
LDA WDATA ; 4
|
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
|
|
|
BIT tick ; 4
|
|
|
|
|
2019-03-05 22:22:35 +00:00
|
|
|
STA zpdummy ; 3
|
2019-03-07 15:20:43 +00:00
|
|
|
JMP .ident(.concat("_op_tick_page_", .string(page), "_tail_33")) ; 3 + 33
|
|
|
|
.endmacro
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-07 15:20:43 +00:00
|
|
|
.macro op_tick_32 page ; repeats from op_tick_14
|
|
|
|
.ident (.concat ("op_tick_32_page_", .string(page))):
|
2019-03-05 22:22:35 +00:00
|
|
|
;4+(4+4+5+4+5+4+2+4)+3+34
|
2019-03-05 21:05:41 +00:00
|
|
|
BIT tick ; 4
|
|
|
|
LDA WDATA ; 4
|
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
|
|
|
NOP ; 2
|
|
|
|
BIT tick ; 4
|
2019-03-05 22:22:35 +00:00
|
|
|
|
2019-03-07 15:20:43 +00:00
|
|
|
JMP .ident(.concat("_op_tick_page_", .string(page), "_tail_34"))
|
|
|
|
.endmacro
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-07 15:20:43 +00:00
|
|
|
.macro op_tick_34 page ; repeats from op_tick_16
|
|
|
|
.ident (.concat ("op_tick_34_page_", .string(page))):
|
|
|
|
; 4+(4+4+5+4+5+4)+3+37
|
2019-03-05 21:05:41 +00:00
|
|
|
BIT tick ; 4
|
|
|
|
LDA WDATA ; 4
|
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-05 22:22:35 +00:00
|
|
|
STA dummy ; 4
|
2019-03-05 21:05:41 +00:00
|
|
|
BIT tick ; 4
|
|
|
|
|
2019-03-05 22:44:39 +00:00
|
|
|
; used >3 pad cycles within tick loop; can't branch to tail
|
2019-03-05 22:22:35 +00:00
|
|
|
NOP ; 2
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-05 22:22:35 +00:00
|
|
|
LDA WDATA ; 4
|
|
|
|
STA @D+2 ; 4
|
|
|
|
LDA WDATA ; 4
|
|
|
|
STA @D+1 ; 4
|
2019-03-05 21:05:41 +00:00
|
|
|
@D:
|
|
|
|
JMP op_nop ; 3
|
2019-03-07 15:20:43 +00:00
|
|
|
.endmacro
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-07 15:20:43 +00:00
|
|
|
.macro op_tick_36 page ; repeats from op_tick_18
|
|
|
|
.ident (.concat ("op_tick_36_page_", .string(page))):
|
2019-03-05 23:20:17 +00:00
|
|
|
;4+(4+4+5+4+5+4+4+2+4)+5+5+2+2+4+4+4+4+3
|
2019-03-05 21:05:41 +00:00
|
|
|
BIT tick ; 4
|
|
|
|
LDA WDATA ; 4
|
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-05 23:20:17 +00:00
|
|
|
LDX WDATA ; 4
|
|
|
|
NOP ; 2
|
|
|
|
BIT tick ; 4
|
|
|
|
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
|
|
|
STA page << 8,X ; 5
|
2019-03-05 23:20:17 +00:00
|
|
|
LDX #$00 ; 2
|
|
|
|
NOP ; 2
|
|
|
|
; used >3 pad cycles within tick loop and restoring invariant; can't branch to tail
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-05 23:20:17 +00:00
|
|
|
LDA WDATA ; 4
|
|
|
|
STA @D+2 ; 4
|
|
|
|
LDA WDATA ; 4
|
|
|
|
STA @D+1 ; 4
|
|
|
|
@D:
|
|
|
|
JMP op_nop ; 3
|
2019-03-07 15:20:43 +00:00
|
|
|
.endmacro
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-07 15:20:43 +00:00
|
|
|
.macro op_tick_38 page ; repeats from op_tick_20
|
|
|
|
.ident (.concat ("op_tick_38_page_", .string(page))):
|
2019-03-05 22:22:35 +00:00
|
|
|
; 4 + (4+4+5+4+5+4+5+3+4)+3+28
|
2019-03-05 21:05:41 +00:00
|
|
|
BIT tick ; 4
|
|
|
|
LDA WDATA ; 4
|
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 22:22:35 +00:00
|
|
|
STA zpdummy ; 3
|
|
|
|
BIT tick ; 4
|
|
|
|
|
2019-03-07 15:20:43 +00:00
|
|
|
JMP .ident(.concat("_op_tick_page_", .string(page), "_tail_28")) ; 3 + 28
|
|
|
|
.endmacro
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-07 15:20:43 +00:00
|
|
|
.macro op_tick_40 page ; repeats from op_tick_22 ; XXX really tick_41
|
|
|
|
.ident (.concat ("op_tick_40_page_", .string(page))):
|
2019-03-05 22:44:39 +00:00
|
|
|
;4+(4+4+5+4+5+4+5+4+4)+3+3+24
|
2019-03-05 21:05:41 +00:00
|
|
|
BIT tick ; 4
|
|
|
|
LDA WDATA ; 4
|
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-05 23:20:17 +00:00
|
|
|
BIT tick ; 4
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-05 22:44:39 +00:00
|
|
|
STA zpdummy
|
2019-03-07 15:20:43 +00:00
|
|
|
JMP .ident(.concat("_op_tick_page_", .string(page), "_tail_24"))
|
|
|
|
.endmacro
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-07 15:20:43 +00:00
|
|
|
.macro op_tick_42 page ; repeats from op_tick_24
|
|
|
|
.ident (.concat ("op_tick_42_page_", .string(page))):
|
2019-03-05 22:22:35 +00:00
|
|
|
;4+(4+4+5+4+5+4+5+4+3+4)+3+24
|
2019-03-05 21:05:41 +00:00
|
|
|
BIT tick ; 4
|
|
|
|
LDA WDATA ; 4
|
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-05 22:22:35 +00:00
|
|
|
STA zpdummy ; 3
|
|
|
|
BIT tick ; 4
|
|
|
|
|
2019-03-07 15:20:43 +00:00
|
|
|
JMP .ident(.concat("_op_tick_page_", .string(page), "_tail_24")) ; 3 + 24
|
|
|
|
.endmacro
|
|
|
|
|
|
|
|
.macro op_tick_44 page ; repeats from op_tick_26
|
|
|
|
.ident (.concat ("op_tick_44_page_", .string(page))):
|
2019-03-05 22:22:35 +00:00
|
|
|
; 4 + (4+4+5+4+5+4+5+4+5+4)+3+3+19
|
2019-03-05 21:05:41 +00:00
|
|
|
BIT tick ; 4
|
|
|
|
LDA WDATA ; 4
|
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
BIT tick; 4
|
|
|
|
|
2019-03-05 22:22:35 +00:00
|
|
|
STA zpdummy ; 3
|
2019-03-07 15:20:43 +00:00
|
|
|
JMP .ident(.concat("_op_tick_page_", .string(page), "_tail_19")) ; 3 + 19
|
|
|
|
.endmacro
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-07 15:20:43 +00:00
|
|
|
.macro op_tick_46 page ; repeats from op_tick_28
|
|
|
|
.ident (.concat ("op_tick_46_page_", .string(page))):
|
2019-03-05 22:22:35 +00:00
|
|
|
;4+(4+2+4+5+4+5+4+5+4+5+4)+3+20
|
2019-03-05 21:05:41 +00:00
|
|
|
BIT tick ; 4
|
|
|
|
LDA WDATA ; 4
|
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 22:22:35 +00:00
|
|
|
NOP ; 2
|
2019-03-05 21:05:41 +00:00
|
|
|
BIT tick ; 4
|
|
|
|
|
2019-03-07 15:20:43 +00:00
|
|
|
JMP .ident(.concat("_op_tick_page_", .string(page), "_tail_20"))
|
|
|
|
.endmacro
|
|
|
|
|
|
|
|
.macro op_tick_48 page ; repeats from op_tick_30
|
|
|
|
.ident (.concat ("op_tick_48_page_", .string(page))):
|
2019-03-05 22:22:35 +00:00
|
|
|
;4+(4+4+5+4+5+4+5+4+5+4+4)+3+3+15
|
2019-03-05 21:05:41 +00:00
|
|
|
BIT tick ; 4
|
|
|
|
LDA WDATA ; 4
|
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-05 22:22:35 +00:00
|
|
|
LDA WDATA ; 4
|
2019-03-05 21:05:41 +00:00
|
|
|
BIT tick ; 4
|
|
|
|
|
2019-03-05 22:22:35 +00:00
|
|
|
STA zpdummy ; 3
|
2019-03-07 15:20:43 +00:00
|
|
|
JMP .ident(.concat("_op_tick_page_", .string(page), "_tail_15")) ; 3 + 15
|
|
|
|
.endmacro
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-07 15:20:43 +00:00
|
|
|
.macro op_tick_50 page ; repeats from op_tick_32
|
|
|
|
.ident (.concat ("op_tick_50_page_", .string(page))):
|
2019-03-05 22:22:35 +00:00
|
|
|
;4+(4+4+5+4+5+4+5+4+5+4+2+4)+3+16
|
2019-03-05 21:05:41 +00:00
|
|
|
BIT tick ; 4
|
|
|
|
LDA WDATA ; 4
|
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-05 22:22:35 +00:00
|
|
|
LDA WDATA ; 4
|
2019-03-05 21:05:41 +00:00
|
|
|
NOP ; 2
|
|
|
|
BIT tick ; 4
|
2019-03-05 22:22:35 +00:00
|
|
|
|
2019-03-07 15:20:43 +00:00
|
|
|
JMP .ident(.concat("_op_tick_page_", .string(page), "_tail_16"))
|
|
|
|
.endmacro
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-07 15:20:43 +00:00
|
|
|
.macro op_tick_52 page ; repeats from op_tick_34
|
|
|
|
.ident (.concat ("op_tick_52_page_", .string(page))):
|
2019-03-05 22:44:39 +00:00
|
|
|
;4+(4+4+5+4+5+4+5+4+5+4+4+4)+2+4+4+4+3
|
2019-03-05 21:05:41 +00:00
|
|
|
BIT tick ; 4
|
|
|
|
LDA WDATA ; 4
|
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-05 22:22:35 +00:00
|
|
|
LDA WDATA ; 4
|
|
|
|
|
|
|
|
STA dummy ; 4
|
2019-03-05 21:05:41 +00:00
|
|
|
BIT tick ; 4
|
|
|
|
|
2019-03-05 22:22:35 +00:00
|
|
|
; used >3 pad cycles within tick loop; can't branch to tail
|
2019-03-05 21:05:41 +00:00
|
|
|
NOP ;2
|
|
|
|
|
2019-03-05 22:22:35 +00:00
|
|
|
STA @D+2 ; 4
|
|
|
|
LDA WDATA ; 4
|
|
|
|
STA @D+1 ; 4
|
2019-03-05 21:05:41 +00:00
|
|
|
@D:
|
|
|
|
JMP op_nop ; 3
|
2019-03-07 15:20:43 +00:00
|
|
|
.endmacro
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-07 15:20:43 +00:00
|
|
|
.macro op_tick_54 page ; repeats from op_tick_36
|
|
|
|
.ident (.concat ("op_tick_54_page_", .string(page))):
|
2019-03-05 22:22:35 +00:00
|
|
|
; 4 + (4+4+5+4+5+4+5+3+3+4+5+4+4)+4+4+4+3
|
2019-03-05 21:05:41 +00:00
|
|
|
BIT tick ; 4
|
|
|
|
LDA WDATA ; 4
|
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-05 22:22:35 +00:00
|
|
|
LDA WDATA ; 4
|
|
|
|
|
|
|
|
STA zpdummy ; 3
|
|
|
|
STA zpdummy ; 3
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-05 22:22:35 +00:00
|
|
|
BIT TICK ; 4
|
|
|
|
|
|
|
|
; used >3 pad cycles within tick loop; can't branch to tail
|
|
|
|
STA @D+2 ; 4
|
|
|
|
LDA WDATA ; 4
|
|
|
|
STA @D+1 ; 4
|
2019-03-05 21:05:41 +00:00
|
|
|
@D:
|
|
|
|
JMP op_nop ; 3
|
2019-03-07 15:20:43 +00:00
|
|
|
.endmacro
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-07 15:20:43 +00:00
|
|
|
.macro op_tick_56 page
|
|
|
|
.ident (.concat ("op_tick_56_page_", .string(page))):
|
2019-03-05 22:22:35 +00:00
|
|
|
; 4+(4+4+5+4+5+4+5+4+5+4+4+4+4)+2+4+4+3
|
2019-03-05 21:05:41 +00:00
|
|
|
BIT tick ; 4
|
|
|
|
LDA WDATA ; 4
|
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-05 22:22:35 +00:00
|
|
|
LDA WDATA ; 4
|
|
|
|
STA @D+2 ; 4
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-05 22:22:35 +00:00
|
|
|
STA dummy ; 4
|
|
|
|
BIT tick ; 4
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-05 22:22:35 +00:00
|
|
|
; used >3 pad cycles within tick loop; can't branch to tail
|
2019-03-05 21:05:41 +00:00
|
|
|
NOP ; 2
|
|
|
|
|
2019-03-05 22:22:35 +00:00
|
|
|
LDA WDATA ; 4
|
|
|
|
STA @D+1 ; 4
|
2019-03-05 21:05:41 +00:00
|
|
|
@D:
|
|
|
|
JMP op_nop ; 3
|
2019-03-07 15:20:43 +00:00
|
|
|
.endmacro
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-07 15:20:43 +00:00
|
|
|
.macro op_tick_58 page ; repeats from op_tick_40
|
|
|
|
.ident (.concat ("op_tick_58_page_", .string(page))):
|
2019-03-05 22:44:39 +00:00
|
|
|
;4+(4+4+5+4+5+4+5+4+5+4+4+3+3+4)+4+4+3
|
2019-03-05 21:05:41 +00:00
|
|
|
BIT tick ; 4
|
|
|
|
LDA WDATA ; 4
|
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-05 22:22:35 +00:00
|
|
|
LDA WDATA ; 4
|
|
|
|
STA @D+2 ; 4
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-05 22:44:39 +00:00
|
|
|
STA zpdummy ; 3
|
|
|
|
STA zpdummy ; 3
|
|
|
|
BIT tick ; 4
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-05 22:44:39 +00:00
|
|
|
; used >3 pad cycles within tick loop; can't branch to tail
|
2019-03-05 22:22:35 +00:00
|
|
|
LDA WDATA ; 4
|
|
|
|
STA @D+1 ; 4
|
2019-03-05 21:05:41 +00:00
|
|
|
@D:
|
|
|
|
JMP op_nop ; 3
|
2019-03-07 15:20:43 +00:00
|
|
|
.endmacro
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-07 15:20:43 +00:00
|
|
|
.macro op_tick_60 page
|
|
|
|
.ident (.concat ("op_tick_60_page_", .string(page))):
|
2019-03-05 22:22:35 +00:00
|
|
|
; 4+(4+4+5+4+5+4+5+4+5+4+4+4+4+4)+2+4+3
|
2019-03-05 21:05:41 +00:00
|
|
|
BIT tick ; 4
|
|
|
|
LDA WDATA ; 4
|
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
|
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-05 22:22:35 +00:00
|
|
|
LDA WDATA ; 4
|
|
|
|
STA @D+2 ; 4
|
|
|
|
LDA WDATA ; 4
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-05 22:22:35 +00:00
|
|
|
STA dummy ; 4
|
|
|
|
BIT tick ; 4
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-05 22:22:35 +00:00
|
|
|
; used >3 pad cycles within tick loop; can't branch to tail
|
2019-03-05 21:05:41 +00:00
|
|
|
NOP ; 2
|
2019-03-05 22:22:35 +00:00
|
|
|
STA @D+1 ; 4
|
2019-03-05 21:05:41 +00:00
|
|
|
@D:
|
|
|
|
JMP op_nop ; 3
|
2019-03-07 15:20:43 +00:00
|
|
|
.endmacro
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-07 15:20:43 +00:00
|
|
|
.macro op_tick_62 page
|
|
|
|
.ident (.concat ("op_tick_62_page_", .string(page))):
|
2019-03-05 22:22:35 +00:00
|
|
|
;4+(4+4+5+4+5+4+5+4+5+4+4+4+3+3+4)+4+3
|
2019-03-05 21:05:41 +00:00
|
|
|
BIT tick ; 4
|
|
|
|
LDA WDATA ; 4
|
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-05 22:22:35 +00:00
|
|
|
LDA WDATA ; 4
|
|
|
|
STA @D+2 ; 4
|
|
|
|
LDA WDATA ; 4
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-05 22:22:35 +00:00
|
|
|
STA zpdummy ; 3
|
|
|
|
STA zpdummy ; 3
|
|
|
|
BIT tick ; 4
|
|
|
|
|
|
|
|
; used >3 pad cycles within tick loop; can't branch to tail
|
|
|
|
STA @D+1 ; 4
|
2019-03-05 21:05:41 +00:00
|
|
|
@D:
|
|
|
|
JMP op_nop ; 3
|
2019-03-07 15:20:43 +00:00
|
|
|
.endmacro
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-07 15:20:43 +00:00
|
|
|
.macro op_tick_64 page
|
|
|
|
.ident (.concat ("op_tick_64_page_", .string(page))):
|
2019-03-05 22:22:35 +00:00
|
|
|
;4+(4+4+5+4+5+4+5+4+5+4+4+4+4+4+4)+2+3
|
2019-03-05 21:05:41 +00:00
|
|
|
BIT tick ; 4
|
|
|
|
LDA WDATA ; 4
|
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
|
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-05 22:22:35 +00:00
|
|
|
LDA WDATA ; 4
|
|
|
|
STA @D+2 ; 4
|
|
|
|
LDA WDATA ; 4
|
|
|
|
STA @D+1 ; 4
|
|
|
|
STA dummy ; 4
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-05 22:22:35 +00:00
|
|
|
BIT tick ; 4
|
2019-03-05 21:05:41 +00:00
|
|
|
NOP ; 2
|
|
|
|
|
|
|
|
@D:
|
|
|
|
JMP op_nop ; 3
|
2019-03-07 15:20:43 +00:00
|
|
|
.endmacro
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-07 15:20:43 +00:00
|
|
|
.macro op_tick_66 page ; repeats from op_tick_8
|
|
|
|
.ident (.concat ("op_tick_66_page_", .string(page))):
|
2019-03-05 22:22:35 +00:00
|
|
|
; 4+(4+4+5+4+5+4+5+4+5+4+4+4+3+4+3+4)+3
|
2019-03-05 21:05:41 +00:00
|
|
|
BIT tick ; 4
|
|
|
|
LDA WDATA ; 4
|
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
|
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
LDY WDATA ; 4
|
2019-03-07 15:20:43 +00:00
|
|
|
STA page << 8,Y ; 5
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-05 22:22:35 +00:00
|
|
|
LDA WDATA ; 4
|
|
|
|
STA @D+2 ; 4
|
|
|
|
LDA WDATA ; 4
|
|
|
|
STA @D+1 ; 4
|
2019-03-05 21:05:41 +00:00
|
|
|
|
2019-03-05 22:22:35 +00:00
|
|
|
STA zpdummy ; 3
|
|
|
|
STA zpdummy ; 3
|
|
|
|
BIT tick ; 4
|
2019-03-05 21:05:41 +00:00
|
|
|
|
|
|
|
@D:
|
|
|
|
JMP op_nop ; 3
|
2019-03-07 15:20:43 +00:00
|
|
|
.endmacro
|
|
|
|
|
2019-03-07 15:53:35 +00:00
|
|
|
.macro op_tick page
|
|
|
|
op_tick_4 page
|
|
|
|
op_tick_6 page
|
|
|
|
op_tick_8 page
|
|
|
|
op_tick_10 page
|
|
|
|
op_tick_12 page
|
|
|
|
op_tick_14 page
|
|
|
|
op_tick_16 page
|
|
|
|
op_tick_18 page
|
|
|
|
op_tick_20 page
|
|
|
|
op_tick_22 page
|
|
|
|
op_tick_24 page
|
|
|
|
op_tick_26 page
|
|
|
|
op_tick_28 page
|
|
|
|
op_tick_30 page
|
|
|
|
op_tick_32 page
|
|
|
|
op_tick_34 page
|
|
|
|
op_tick_36 page
|
|
|
|
op_tick_38 page
|
|
|
|
op_tick_40 page
|
|
|
|
op_tick_42 page
|
|
|
|
op_tick_44 page
|
|
|
|
op_tick_46 page
|
|
|
|
op_tick_48 page
|
|
|
|
op_tick_50 page
|
|
|
|
op_tick_52 page
|
|
|
|
op_tick_54 page
|
|
|
|
op_tick_56 page
|
|
|
|
op_tick_58 page
|
|
|
|
op_tick_60 page
|
|
|
|
op_tick_62 page
|
|
|
|
op_tick_64 page
|
|
|
|
op_tick_66 page
|
|
|
|
.endmacro
|
|
|
|
|
|
|
|
op_tick 32
|
|
|
|
op_tick 33
|
|
|
|
op_tick 34
|
|
|
|
op_tick 35
|
|
|
|
op_tick 36
|
|
|
|
op_tick 37
|
|
|
|
op_tick 38
|
|
|
|
op_tick 39
|
|
|
|
op_tick 40
|
|
|
|
op_tick 41
|
|
|
|
op_tick 42
|
|
|
|
op_tick 43
|
|
|
|
op_tick 44
|
|
|
|
op_tick 45
|
|
|
|
op_tick 46
|
|
|
|
op_tick 47
|
|
|
|
op_tick 48
|
|
|
|
op_tick 49
|
2019-03-07 16:04:01 +00:00
|
|
|
op_tick 50
|
|
|
|
op_tick 51
|
|
|
|
op_tick 52
|
|
|
|
op_tick 53
|
|
|
|
op_tick 54
|
|
|
|
op_tick 55
|
|
|
|
op_tick 56
|
2019-03-07 15:53:35 +00:00
|
|
|
;op_tick 57
|
|
|
|
;op_tick 58
|
|
|
|
;op_tick 59
|
|
|
|
;op_tick 60
|
|
|
|
;op_tick 61
|
|
|
|
;op_tick 62
|
|
|
|
;op_tick 63
|
2019-03-07 15:20:43 +00:00
|
|
|
|
2019-03-05 21:05:41 +00:00
|
|
|
|
|
|
|
op_ack:
|
|
|
|
; MOVE ADDRESS POINTER 1 page further in socket buffer
|
|
|
|
; LDX WADRH ; socket pointer
|
|
|
|
; INX
|
|
|
|
|
|
|
|
; UPDATE REXRD TO REFLECT DATA WE JUST READ
|
|
|
|
|
|
|
|
; TODO: be careful about which registers we stomp here
|
|
|
|
; UPDATERXRD:
|
|
|
|
|
|
|
|
BIT tick
|
|
|
|
|
|
|
|
CLC
|
|
|
|
LDA #>S0RXRD ; NEED HIGH BYTE HERE
|
|
|
|
STA WADRH
|
|
|
|
LDA #<S0RXRD
|
|
|
|
|
|
|
|
STA WADRL
|
|
|
|
LDA WDATA
|
|
|
|
TAY ; SAVE
|
|
|
|
LDA WDATA ; LOW BYTE ; needed? I don't think so
|
|
|
|
BEQ @1
|
|
|
|
BRK
|
|
|
|
@1:
|
|
|
|
|
|
|
|
ADC #$00 ; GETSIZE ; ADD LOW BYTE OF RECEIVED SIZE
|
|
|
|
BIT tick
|
|
|
|
|
|
|
|
TAX ; SAVE
|
|
|
|
TYA ; GET HIGH BYTE BACK
|
|
|
|
ADC #$08 ;GETSIZE+1 ; ADD HIGH BYTE OF RECEIVED SIZE
|
|
|
|
TAY ; SAVE
|
|
|
|
|
|
|
|
|
|
|
|
LDA #<S0RXRD
|
|
|
|
STA WADRL ; XXX already there?
|
|
|
|
|
|
|
|
STY WDATA ; SEND HIGH BYTE
|
|
|
|
STX WDATA ; SEND LOW BYTE
|
|
|
|
|
|
|
|
|
|
|
|
; SEND THE RECV COMMAND
|
|
|
|
LDA #<S0CR
|
|
|
|
STA WADRL
|
|
|
|
LDA #SCRECV
|
|
|
|
STA WDATA
|
|
|
|
|
|
|
|
JMP CHECKRECV
|
|
|
|
|
|
|
|
; CLOSE TCP CONNECTION
|
|
|
|
|
|
|
|
CLOSECONN:
|
|
|
|
LDA #>S0CR ; HIGH BYTE NEEDED
|
|
|
|
STA WADRH
|
|
|
|
LDA #<S0CR
|
|
|
|
STA WADRL
|
|
|
|
LDA #SCDISCON ; DISCONNECT
|
|
|
|
STA WDATA ; SEND COMMAND
|
|
|
|
|
|
|
|
; CHECK FOR CLOSED STATUS
|
|
|
|
|
|
|
|
CHECKCLOSED:
|
|
|
|
LDX #0
|
|
|
|
@L:
|
|
|
|
LDA #<S0SR
|
|
|
|
STA WADRL
|
|
|
|
LDA WDATA
|
|
|
|
BEQ ISCLOSED
|
|
|
|
NOP
|
|
|
|
NOP
|
|
|
|
NOP
|
|
|
|
INX
|
|
|
|
BNE @L ; DON'T WAIT FOREVER
|
|
|
|
ISCLOSED:
|
|
|
|
RTS ; SOCKET IS CLOSED
|
|
|
|
|
|
|
|
; SUPPORT SUBROUTINE: CLEANOUT
|
|
|
|
; "CLEANS UP" OUTPUT FOR THE APPLE BY
|
|
|
|
; SETTING THE HIGH BIT AND DOING SOME SUBSTITUTIONS
|
|
|
|
CLEANOUT:
|
|
|
|
ORA #%10000000 ; SET HIGH BIT
|
|
|
|
CMP #$8A ; NEWLINE?
|
|
|
|
BNE @OUT
|
|
|
|
LDA #$8D ; CONVERT TO <CR>
|
|
|
|
@OUT:
|
|
|
|
JMP COUT ; THIS WILL DO THE RTS
|
|
|
|
|
|
|
|
; DEBUG - PRINT W5100 STARTADR AND SIZE
|
|
|
|
DEBUG:
|
|
|
|
LDA #$A0 ; " "
|
|
|
|
JSR COUT
|
|
|
|
LDA #$A4 ; "$"
|
|
|
|
JSR COUT
|
|
|
|
LDA GETOFFSET+1
|
|
|
|
LDX GETOFFSET
|
|
|
|
JSR PRNTAX
|
|
|
|
|
|
|
|
LDA #$A0 ; " "
|
|
|
|
JSR COUT
|
|
|
|
LDA #$A4 ; "$"
|
|
|
|
JSR COUT
|
|
|
|
LDA GETSTARTADR+1
|
|
|
|
LDX GETSTARTADR
|
|
|
|
JSR PRNTAX
|
|
|
|
|
|
|
|
LDA #$A0 ; " "
|
|
|
|
JSR COUT
|
|
|
|
LDA #$A4 ; "$"
|
|
|
|
JSR COUT
|
|
|
|
LDA GETSIZE+1
|
|
|
|
LDX GETSIZE
|
|
|
|
JSR PRNTAX
|
|
|
|
LDA #$8D
|
|
|
|
JMP COUT ; THIS WILL DO THE RTS
|
|
|
|
|
|
|
|
.endproc
|