more sane directory name, updated binaries
This commit is contained in:
1 parent
d4d32095d1
commit
76aaf298b8
697 files changed
+56
-56
No files matched your search
@@ -0,0 +1,17 @@
|
||||
// #LAYOUT# STD * #TAKE
|
||||
// #LAYOUT# * KERNAL_0 #TAKE
|
||||
// #LAYOUT# * * #IGNORE
|
||||
|
||||
//
|
||||
// RS-232 part of the CHKIN routine
|
||||
//
|
||||
|
||||
|
||||
#if CONFIG_RS232_UP2400
|
||||
|
||||
|
||||
chkin_rs232:
|
||||
STUB_IMPLEMENTATION() // XXX provide implementation for both UP2400 and UP9600
|
||||
|
||||
|
||||
#endif // CONFIG_RS232_UP2400
|
||||
@@ -0,0 +1,51 @@
|
||||
// #LAYOUT# STD * #TAKE
|
||||
// #LAYOUT# * KERNAL_0 #TAKE
|
||||
// #LAYOUT# * * #IGNORE
|
||||
|
||||
//
|
||||
// RS-232 part of the CHKIN routine
|
||||
//
|
||||
|
||||
// Based on UP9600 code by Daniel Dallman with Bo Zimmerman adaptations
|
||||
|
||||
|
||||
#if CONFIG_RS232_UP9600
|
||||
|
||||
|
||||
// XXX get rid of the ENABLE/DISABLE mechanism
|
||||
|
||||
|
||||
chkin_rs232:
|
||||
|
||||
pha
|
||||
lda XXX_UPFLAG
|
||||
bne !+
|
||||
pla
|
||||
jmp $F20E // XXX
|
||||
|
||||
!:
|
||||
pla
|
||||
jsr $F30F // XXX
|
||||
beq !+
|
||||
jmp $F701 // XXX
|
||||
|
||||
!:
|
||||
jsr $F31F // XXX
|
||||
lda FA
|
||||
cmp #$02
|
||||
beq !+
|
||||
cmp #$04
|
||||
bcc chkin_rs232_nochkin
|
||||
jsr XXX_DISABLE
|
||||
jmp chkin_rs232_nochkin
|
||||
!:
|
||||
sta $99
|
||||
jsr XXX_ENABLE
|
||||
clc
|
||||
rts
|
||||
|
||||
chkin_rs232_nochkin
|
||||
jmp $F219 // XXX
|
||||
|
||||
|
||||
#endif // CONFIG_RS232_UP9600
|
||||
@@ -0,0 +1,17 @@
|
||||
// #LAYOUT# STD * #TAKE
|
||||
// #LAYOUT# * KERNAL_0 #TAKE
|
||||
// #LAYOUT# * * #IGNORE
|
||||
|
||||
//
|
||||
// RS-232 part of the CHRIN routine
|
||||
//
|
||||
|
||||
|
||||
#if CONFIG_RS232_UP2400
|
||||
|
||||
|
||||
chrin_rs232:
|
||||
STUB_IMPLEMENTATION() // XXX provide implementation for both UP2400 and UP9600
|
||||
|
||||
|
||||
#endif // CONFIG_RS232_UP2400
|
||||
@@ -0,0 +1,46 @@
|
||||
// #LAYOUT# STD * #TAKE
|
||||
// #LAYOUT# * KERNAL_0 #TAKE
|
||||
// #LAYOUT# * * #IGNORE
|
||||
|
||||
//
|
||||
// RS-232 part of the CHRIN routine
|
||||
//
|
||||
|
||||
// Based on UP9600 code by Daniel Dallman with Bo Zimmerman adaptations
|
||||
|
||||
|
||||
#if CONFIG_RS232_UP9600
|
||||
|
||||
|
||||
chrin_rs232:
|
||||
|
||||
phy_trash_a
|
||||
phx_trash_a
|
||||
|
||||
lda #$00
|
||||
sta XXX_SAVBYTE
|
||||
sta RSSTAT
|
||||
jsr up9600_rsin
|
||||
bcc !+
|
||||
plx_trash_a
|
||||
ply_trash_a
|
||||
|
||||
lda #$08 // XXX don't we have some routine for this?
|
||||
sta RSSTAT
|
||||
lda #$00
|
||||
clc
|
||||
rts
|
||||
!:
|
||||
sta XXX_SAVBYTE
|
||||
|
||||
XXX_DOGET4:
|
||||
|
||||
plx_trash_a
|
||||
ply_trash_a
|
||||
|
||||
lda XXX_SAVBYTE
|
||||
clc
|
||||
rts
|
||||
|
||||
|
||||
#endif // CONFIG_RS232_UP9600
|
||||
@@ -0,0 +1,17 @@
|
||||
// #LAYOUT# STD * #TAKE
|
||||
// #LAYOUT# * KERNAL_0 #TAKE
|
||||
// #LAYOUT# * * #IGNORE
|
||||
|
||||
//
|
||||
// RS-232 part of the CHROUT routine
|
||||
//
|
||||
|
||||
|
||||
#if HAS_RS232
|
||||
|
||||
|
||||
chrout_rs232:
|
||||
STUB_IMPLEMENTATION() // XXX provide implementation for both UP2400 and UP9600
|
||||
|
||||
|
||||
#endif // HAS_RS232
|
||||
@@ -0,0 +1,17 @@
|
||||
// #LAYOUT# STD * #TAKE
|
||||
// #LAYOUT# * KERNAL_0 #TAKE
|
||||
// #LAYOUT# * * #IGNORE
|
||||
|
||||
//
|
||||
// RS-232 part of the CKOUT routine
|
||||
//
|
||||
|
||||
|
||||
#if CONFIG_RS232_UP2400
|
||||
|
||||
|
||||
ckout_rs232:
|
||||
STUB_IMPLEMENTATION() // XXX provide implementation for both UP2400 and UP9600
|
||||
|
||||
|
||||
#endif // CONFIG_RS232_UP2400
|
||||
@@ -0,0 +1,26 @@
|
||||
// #LAYOUT# STD * #TAKE
|
||||
// #LAYOUT# * KERNAL_0 #TAKE
|
||||
// #LAYOUT# * * #IGNORE
|
||||
|
||||
//
|
||||
// RS-232 part of the CKOUT routine
|
||||
//
|
||||
|
||||
// Based on UP9600 code by Daniel Dallman with Bo Zimmerman adaptations
|
||||
|
||||
|
||||
#if CONFIG_RS232_UP9600
|
||||
|
||||
|
||||
ckout_rs232:
|
||||
|
||||
// XXX adapt this
|
||||
|
||||
lda #$02
|
||||
sta DFLTO
|
||||
jsr ENABLE
|
||||
clc
|
||||
rts
|
||||
|
||||
|
||||
#endif // CONFIG_RS232_UP9600
|
||||
@@ -0,0 +1,45 @@
|
||||
// #LAYOUT# STD * #TAKE
|
||||
// #LAYOUT# * KERNAL_0 #TAKE
|
||||
// #LAYOUT# * * #IGNORE
|
||||
|
||||
//
|
||||
// RS-232 part of the CLOSE routine
|
||||
//
|
||||
|
||||
|
||||
#if HAS_RS232
|
||||
|
||||
|
||||
#if CONFIG_MEMORY_MODEL_60K
|
||||
.error "CONFIG_MEMORY_MODEL_60K is not compatible with RS-232 memory allocation code"
|
||||
#endif
|
||||
|
||||
|
||||
close_rs232:
|
||||
|
||||
// First check how many RS-232 channels are currently allocated.
|
||||
// If more than one, skip deallocation (other channels still uses the buffer).
|
||||
|
||||
jsr rs232_count_channels
|
||||
cpx #$02 // set Carry if more than one is open
|
||||
bcs close_rs232_end
|
||||
|
||||
// Deallocate buffer
|
||||
|
||||
inc MEMSIZK+1
|
||||
inc MEMSIZK+1
|
||||
|
||||
// XXX is this needed? check with original ROM what it actually does
|
||||
|
||||
lda #$00
|
||||
sta ROBUF+0
|
||||
sta ROBUF+1
|
||||
sta RIBUF+0
|
||||
sta RIBUF+1
|
||||
|
||||
close_rs232_end:
|
||||
|
||||
jmp close_remove_from_table
|
||||
|
||||
|
||||
#endif // HAS_RS232
|
||||
@@ -0,0 +1,17 @@
|
||||
// #LAYOUT# STD * #TAKE
|
||||
// #LAYOUT# * KERNAL_0 #TAKE
|
||||
// #LAYOUT# * * #IGNORE
|
||||
|
||||
//
|
||||
// RS-232 part of the GETIN routine
|
||||
//
|
||||
|
||||
|
||||
#if HAS_RS232
|
||||
|
||||
|
||||
getin_rs232:
|
||||
STUB_IMPLEMENTATION() // XXX provide implementation for both UP2400 and UP9600
|
||||
|
||||
|
||||
#endif // HAS_RS232
|
||||
@@ -0,0 +1,63 @@
|
||||
// #LAYOUT# STD * #TAKE
|
||||
// #LAYOUT# * KERNAL_0 #TAKE
|
||||
// #LAYOUT# * * #IGNORE
|
||||
|
||||
//
|
||||
// RS-232 part of the OPEN routine
|
||||
//
|
||||
|
||||
|
||||
#if HAS_RS232
|
||||
|
||||
|
||||
#if CONFIG_MEMORY_MODEL_60K
|
||||
.error "CONFIG_MEMORY_MODEL_60K is not compatible with RS-232 memory allocation code"
|
||||
#endif
|
||||
|
||||
|
||||
open_rs232:
|
||||
|
||||
// First check how many RS-232 channels are currently allocated.
|
||||
// If more than one, skip allocation (already allocated).
|
||||
|
||||
jsr rs232_count_channels
|
||||
cpx #$02 // set Carry if more than one is open
|
||||
bcs open_rs232_end
|
||||
|
||||
// Allocate buffers - first RIBUF, afterwards ROBUF
|
||||
// (checked addresses on original ROMs)
|
||||
|
||||
lda MEMSIZK+0
|
||||
sta ROBUF+0
|
||||
sta RIBUF+0
|
||||
|
||||
dec MEMSIZK+1
|
||||
lda MEMSIZK+1
|
||||
sta RIBUF+1
|
||||
|
||||
dec MEMSIZK+1
|
||||
lda MEMSIZK+1
|
||||
sta ROBUF+1
|
||||
|
||||
// Initialize buffer indexes
|
||||
|
||||
lda #$00
|
||||
sta RIDBE
|
||||
sta RIDBS
|
||||
sta RODBS
|
||||
sta RODBE
|
||||
|
||||
|
||||
#if CONFIG_RS232_UP9600
|
||||
|
||||
jmp up9600_enable
|
||||
|
||||
#endif // CONFIG_RS232_UP9600
|
||||
|
||||
|
||||
open_rs232_end:
|
||||
|
||||
jmp open_done_success
|
||||
|
||||
|
||||
#endif // HAS_RS232
|
||||
@@ -0,0 +1,29 @@
|
||||
// #LAYOUT# STD * #TAKE
|
||||
// #LAYOUT# * KERNAL_0 #TAKE
|
||||
// #LAYOUT# * * #IGNORE
|
||||
|
||||
//
|
||||
// Sets .X to number of open RS-232 channels
|
||||
//
|
||||
|
||||
|
||||
#if HAS_RS232
|
||||
|
||||
|
||||
rs232_count_channels:
|
||||
|
||||
ldx #$00
|
||||
ldy LDTND
|
||||
!:
|
||||
dey
|
||||
bmi close_rs232_search_done
|
||||
lda FAT, y
|
||||
cmp #$02
|
||||
bne !-
|
||||
inx
|
||||
bpl !- // branch always
|
||||
|
||||
rts
|
||||
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,46 @@
|
||||
// #LAYOUT# STD * #TAKE
|
||||
// #LAYOUT# * KERNAL_0 #TAKE
|
||||
// #LAYOUT# * * #IGNORE
|
||||
|
||||
//
|
||||
// Disable UP9600 interface
|
||||
//
|
||||
|
||||
// Based on UP9600 code by Daniel Dallman with Bo Zimmerman adaptations
|
||||
|
||||
|
||||
#if CONFIG_RS232_UP9600
|
||||
|
||||
|
||||
up9600_disable: // XXX adapt
|
||||
|
||||
// XXX restore interrupt vectors and IRQ timer
|
||||
|
||||
sei
|
||||
lda CIA2_PRB // $DD01; DISABLE RTS
|
||||
and #$FD
|
||||
sta CIA2_PRB // $DD01
|
||||
lda #$7F
|
||||
sta CIA2_ICR // $DD0D ; DISABLE ALL CIA INTERRUPTS
|
||||
sta CIA1_ICR // $DC0D
|
||||
lda #$41; QUICK (AND DIRTY) HACK TO SWITCH BACK
|
||||
sta CIA1_TIMAHI // $DC05 ; TO THE DEFAULT CIA1 CONFIGURATION
|
||||
lda #$81
|
||||
sta CIA1_ICR // $DC0D ; ENABLE TIMER1 (THIS IS DEFAULT)
|
||||
lda #<ORIGIRQ; RESTORE OLD IRQ-HANDLER
|
||||
sta IRQVECT
|
||||
lda #>ORIGIRQ
|
||||
sta IRQVECT+1
|
||||
lda #<ORIGNMI; RESTORE OLD NMI-HANDLER
|
||||
sta NMIVECT
|
||||
lda #>ORIGNMI
|
||||
sta NMIVECT+1
|
||||
cli
|
||||
pla
|
||||
tay
|
||||
pla
|
||||
tax
|
||||
pla
|
||||
|
||||
|
||||
#endif // CONFIG_RS232_UP9600
|
||||
@@ -0,0 +1,134 @@
|
||||
// #LAYOUT# STD * #TAKE
|
||||
// #LAYOUT# * KERNAL_0 #TAKE
|
||||
// #LAYOUT# * * #IGNORE
|
||||
|
||||
//
|
||||
// Enable UP9600 interface support
|
||||
//
|
||||
|
||||
// Based on UP9600 code by Daniel Dallman with Bo Zimmerman adaptations
|
||||
|
||||
|
||||
#if CONFIG_RS232_UP9600
|
||||
|
||||
|
||||
up9600_enable: // XXX adapt
|
||||
|
||||
sei
|
||||
|
||||
|
||||
|
||||
lda IRQVECT
|
||||
cmp #<ORIGIRQ
|
||||
bne INSTERR; IRQ-VECTOR ALREADY CHANGED
|
||||
lda IRQVECT+1
|
||||
cmp #>ORIGIRQ
|
||||
bne INSTERR; IRQ-VECTOR ALREADY CHANGED
|
||||
lda NMIVECT
|
||||
cmp #<ORIGNMI
|
||||
bne INSTERR; NMI-VECTOR ALREADY CHANGED
|
||||
lda NMIVECT+1
|
||||
cmp #>ORIGNMI
|
||||
bne INSTERR; NMI-VECTOR ALREADY CHANGED
|
||||
ldy #0
|
||||
sty RODBE
|
||||
sty RODBS
|
||||
sty RIDBE
|
||||
sty RIDBS
|
||||
; PROBE FOR RS232 INTERFACE
|
||||
cli
|
||||
lda #$7F
|
||||
sta CIA2_ICR // $DD0D ; DISABLE ALL NMIS
|
||||
lda #$80
|
||||
sta CIA2_DDRB // $DD03 ; PB7 USED AS OUTPUT
|
||||
sta $DD0E; STOP TIMERA
|
||||
sta CIA2_CRB // $DD0F ; STOP TIMERB
|
||||
bit CIA2_ICR // $DD0D ; CLEAR PENDING INTERRUPTS
|
||||
ldx #8
|
||||
INSTALL2
|
||||
stx CIA2_PRB // $DD01; TOGGLE TXD
|
||||
sta CIA2_PRB // $DD01; AND LOOK IF IT TRIGGERS AN
|
||||
dex; SHIFT-REGISTER INTERRUPT
|
||||
bne INSTALL2
|
||||
lda CIA2_ICR // $DD0D ; CHECK FOR BIT3 (SDR-FLAG)
|
||||
and #8
|
||||
beq INSTERR; NO INTERFACE DETECTED
|
||||
; GENERATE LOOKUP TABLE
|
||||
ldx #0
|
||||
INSTALL3
|
||||
stx OUTSTAT; OUTSTAT USED AS TEMPORARY VARIABLE
|
||||
ldy #8
|
||||
INSTALL4
|
||||
asl OUTSTAT
|
||||
ror
|
||||
dey
|
||||
bne INSTALL4
|
||||
sta REVTAB,X
|
||||
inx
|
||||
bpl INSTALL3
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
sei
|
||||
// XXX set NEWIRQ as IRQ vector
|
||||
// XXX set NMIDOBIT as NMI vector
|
||||
|
||||
ldx TVSFLG; PAL OR NTSC VERSION PRINT
|
||||
lda ILOTAB,X; (KEYSCAN INTERRUPT ONCE EVERY 1/64 SECOND)
|
||||
sta CIA1_TIMBLO // $DC06 ; (SORRY THIS WILL BREAK CODE, THAT USES
|
||||
lda IHITAB,X; THE TI$ - VARIABLE)
|
||||
sta CIA1_TIMBHI // $DC07 ; START VALUE FOR TIMER B (OF CIA1)
|
||||
txa
|
||||
asl
|
||||
eor #$33; ** TIME CONSTANT FOR SENDER **
|
||||
ldx #0; 51 OR 55 DEPENDING ON PAL/NTSC VERSION
|
||||
sta CIA1_TIMALO // $DC04 ; START VALUE FOR TIMERA (OF CIA1)
|
||||
stx CIA1_TIMAHI // $DC05 ; (TIME IS AROUND 1/(2*BAUDRATE) )
|
||||
asl; ** TIME CONSTANT FOR RECEIVER **
|
||||
ora #1; 103 OR 111 DEPENDING ON PAL/NTSC VERSION
|
||||
sta CIA2_TIMBLO // $DD06 ; START VALUE FOR TIMERB (OF CIA2)
|
||||
stx CIA2_TIMBHI // $DD07 ; (TIME IS AROUND 1/BAUDRATE )
|
||||
lda #$41; START TIMERA OF CIA1, SP1 USED AS OUTPUT
|
||||
sta CIA1_CRA // $DC0E ; GENERATES THE SENDER'S BIT CLOCK
|
||||
lda #1
|
||||
sta OUTSTAT
|
||||
sta CIA1_ICR // $DC0D ; DISABLE TIMERA (CIA1) INTERRUPT
|
||||
sta CIA1_CRB // $DC0F ; START TIMERB OF CIA1 (GENERATES KEYSCAN IRQ)
|
||||
lda #$92; STOP TIMERB OF CIA2 (ENABLE SIGNAL AT PB7)
|
||||
sta CIA2_CRB // $DD0F
|
||||
lda #$98
|
||||
bit CIA2_ICR // $DD0D ; CLEAR PENDING NMIS
|
||||
sta CIA2_ICR // $DD0D ; ENABLE NMI (SDR AND FLAG) (CIA2)
|
||||
lda #$8A
|
||||
sta CIA1_ICR // $DC0D ; ENABLE IRQ (TIMERB AND SDR) (CIA1)
|
||||
lda #$FF
|
||||
sta CIA2_PRB // $DD01; PB0-7 DEFAULT TO 1
|
||||
sta CIA1_SDR // $DC0C ; SP1 DEFAULTS TO 1
|
||||
sec
|
||||
lda RIDBE
|
||||
sbc RIDBS
|
||||
cmp #200
|
||||
bcc ENABLE2;; DON'T ENABLE RTS IF REC-BUFFER IS FULL
|
||||
lda #2;; ENABLE RTS
|
||||
sta CIA2_DDRB // $DD03 ;; (THE RTS LINE IS THE ONLY OUTPUT)
|
||||
ENABLE2
|
||||
cli
|
||||
pla
|
||||
tay
|
||||
pla
|
||||
tax
|
||||
pla
|
||||
rts
|
||||
|
||||
|
||||
|
||||
|
||||
INSTERR
|
||||
cli
|
||||
sec
|
||||
rts
|
||||
|
||||
|
||||
#endif // CONFIG_RS232_UP9600
|
||||
@@ -0,0 +1,21 @@
|
||||
// #LAYOUT# STD * #TAKE
|
||||
// #LAYOUT# * KERNAL_0 #TAKE
|
||||
// #LAYOUT# * * #IGNORE
|
||||
|
||||
//
|
||||
// Timer values for PAL/NTSC - high bytes
|
||||
//
|
||||
|
||||
// Based on UP9600 code by Daniel Dallman with Bo Zimmerman adaptations
|
||||
|
||||
|
||||
#if CONFIG_RS232_UP9600
|
||||
|
||||
|
||||
up9600_ihitab:
|
||||
|
||||
.byte $42
|
||||
.byte $40
|
||||
|
||||
|
||||
#endif // CONFIG_RS232_UP9600
|
||||
@@ -0,0 +1,21 @@
|
||||
// #LAYOUT# STD * #TAKE
|
||||
// #LAYOUT# * KERNAL_0 #TAKE
|
||||
// #LAYOUT# * * #IGNORE
|
||||
|
||||
//
|
||||
// Timer values for PAL/NTSC - low bytes
|
||||
//
|
||||
|
||||
// Based on UP9600 code by Daniel Dallman with Bo Zimmerman adaptations
|
||||
|
||||
|
||||
#if CONFIG_RS232_UP9600
|
||||
|
||||
|
||||
up9600_ilotab:
|
||||
|
||||
.byte $95
|
||||
.byte $25
|
||||
|
||||
|
||||
#endif // CONFIG_RS232_UP9600
|
||||
@@ -0,0 +1,43 @@
|
||||
// #LAYOUT# STD * #TAKE
|
||||
// #LAYOUT# * KERNAL_0 #TAKE
|
||||
// #LAYOUT# * * #IGNORE
|
||||
|
||||
//
|
||||
// RS-232 IRQ handler part
|
||||
//
|
||||
|
||||
// Based on UP9600 code by Daniel Dallman with Bo Zimmerman adaptations
|
||||
|
||||
|
||||
#if CONFIG_RS232_UP9600
|
||||
|
||||
|
||||
up9600_irq:
|
||||
|
||||
lda CIA1_ICR // $DC0D
|
||||
|
||||
lsr
|
||||
lsr // move bit 1 (timer B flag) into Carry
|
||||
and #$02 // test SDR (shift register) status
|
||||
|
||||
beq up9600_irq_continue
|
||||
|
||||
ldx RINONE
|
||||
beq !+ // skip if not waiting for empty SDR
|
||||
dex
|
||||
stx RINONE
|
||||
!:
|
||||
bcc up9600_irq_end
|
||||
|
||||
up9600_irq_continue:
|
||||
|
||||
rts
|
||||
|
||||
up9600_irq_end:
|
||||
|
||||
pla
|
||||
pla
|
||||
jmp return_from_interrupt
|
||||
|
||||
|
||||
#endif // CONFIG_RS232_UP9600
|
||||
@@ -0,0 +1,69 @@
|
||||
// #LAYOUT# STD * #TAKE
|
||||
// #LAYOUT# * KERNAL_0 #TAKE
|
||||
// #LAYOUT# * * #IGNORE
|
||||
|
||||
//
|
||||
// RS-232 NMI handler part
|
||||
//
|
||||
|
||||
// Based on UP9600 code by Daniel Dallman with Bo Zimmerman adaptations
|
||||
|
||||
|
||||
#if CONFIG_RS232_UP9600
|
||||
|
||||
|
||||
up9600_nmi:
|
||||
// XXX integrate with NMI handler
|
||||
|
||||
pha
|
||||
bit CIA2_ICR // $DD0D; check if CIA caused the interrupt
|
||||
bpl NMIDOBI2; NO STARTBIT RECEIVED, THEN SKIP
|
||||
lda #$13
|
||||
sta CIA2_CRB // $DD0F; START TIMER B (FORCED RELOAD, SIGNAL AT PB7)
|
||||
sta CIA2_ICR // $DD0D; DISABLE TIMER AND FLAG INTERRUPTS
|
||||
lda #<NMIBYTRY; ON NEXT NMI CALL NMIBYTRY
|
||||
sta NMIVECT; (TRIGGERED BY SDR FULL)
|
||||
lda #>NMIBYTRY
|
||||
sta NMIVECT+1
|
||||
NMIDOBI2
|
||||
pla; IGNORE, IF NMI WAS TRIGGERED BY RESTORE-KEY
|
||||
rti
|
||||
;
|
||||
NMIBYTRY
|
||||
pha
|
||||
bit CIA2_ICR // $DD0D; CHECK BIT 7 (SDR FULL PRINT)
|
||||
bpl NMIDOBI2; SDR NOT FULL, THEN SKIP (EG. RESTORE-KEY)
|
||||
lda #$92
|
||||
sta CIA2_CRB // $DD0F; STOP TIMER B (KEEP SIGNALLING AT PB7!)
|
||||
sta CIA2_ICR // $DD0D; ENABLE FLAG (AND TIMER) INTERRUPTS
|
||||
lda #<NMIDOBIT; ON NEXT NMI CALL NMIDOBIT
|
||||
sta NMIVECT; (TRIGGERED BY A STARTBIT)
|
||||
lda #>NMIDOBIT
|
||||
sta NMIVECT+1
|
||||
phx_trash_a
|
||||
phy_trash_a
|
||||
lda CIA2_SDR // $DD0C; READ SDR (BIT0=DATABIT7,...,BIT7=DATABIT0)
|
||||
cmp #128; MOVE BIT7 INTO CARRY-FLAG
|
||||
and #127
|
||||
tax
|
||||
lda REVTAB,X; READ DATABITS 1-7 FROM LOOKUP TABLE
|
||||
adc #0; ADD DATABIT0
|
||||
ldy RIDBE; AND WRITE IT INTO THE RECEIVE BUFFER
|
||||
sta (RIBUF),Y
|
||||
iny
|
||||
sty RIDBE
|
||||
sec;;START BUFFER FULL CHK
|
||||
tya
|
||||
sbc RIDBS
|
||||
cmp #200
|
||||
bcc NMIBYTR2
|
||||
lda CIA2_PRB // $DD01;; MORE THAN 200 BYTES IN THE RECEIVE BUFFER
|
||||
and #$FD;; THEN DISABLE RTS
|
||||
sta CIA2_PRB // $DD01
|
||||
NMIBYTR2
|
||||
ply_trash_a
|
||||
plx_trash_a
|
||||
pla
|
||||
rti
|
||||
|
||||
#endif // CONFIG_RS232_UP9600
|
||||
@@ -0,0 +1,46 @@
|
||||
// #LAYOUT# STD * #TAKE
|
||||
// #LAYOUT# * KERNAL_0 #TAKE
|
||||
// #LAYOUT# * * #IGNORE
|
||||
|
||||
//
|
||||
// Get byte from serial interface
|
||||
//
|
||||
|
||||
// Based on UP9600 code by Daniel Dallman with Bo Zimmerman adaptations
|
||||
|
||||
|
||||
#if CONFIG_RS232_UP9600
|
||||
|
||||
|
||||
up9600_rsin:
|
||||
|
||||
ldy RIDBS
|
||||
cpy RIDBE
|
||||
beq up9600_rsin_end; // skip (empty buffer, return with carry set)
|
||||
|
||||
lda (RIBUF),Y
|
||||
iny
|
||||
sty RIDBS
|
||||
pha // begin buffer emptying chk
|
||||
tya
|
||||
sec
|
||||
sbc RIDBE
|
||||
cmp #206 // 256-50
|
||||
bcc !+
|
||||
lda #$02
|
||||
ora CIA2_PR // $DD01
|
||||
sta CIA2_PR // enable RTS
|
||||
clc
|
||||
|
||||
// FALLTROUGH
|
||||
|
||||
!:
|
||||
pla
|
||||
|
||||
// FALLTROUGH
|
||||
|
||||
up9600_rsin_end:
|
||||
|
||||
rts
|
||||
|
||||
#endif // CONFIG_RS232_UP9600
|
||||
@@ -0,0 +1,59 @@
|
||||
// #LAYOUT# STD * #TAKE
|
||||
// #LAYOUT# * KERNAL_0 #TAKE
|
||||
// #LAYOUT# * * #IGNORE
|
||||
|
||||
//
|
||||
// Put byte to serial interface
|
||||
//
|
||||
|
||||
// Based on UP9600 code by Daniel Dallman with Bo Zimmerman adaptations
|
||||
|
||||
|
||||
#if CONFIG_RS232_UP9600
|
||||
|
||||
|
||||
up9600_rsout:
|
||||
|
||||
pha
|
||||
sta $9E // XXX synchronize with aliases
|
||||
cmp #$80
|
||||
and #$7F
|
||||
stx $A8 // XXX synchronize with aliases
|
||||
sty $A7 // XXX synchronize with aliases
|
||||
tax
|
||||
jsr up9600_rsout_time
|
||||
|
||||
lda REVTAB, x
|
||||
adc #$00
|
||||
lsr
|
||||
sei
|
||||
sta CIA1_SDR // $DC0C
|
||||
lda #$02
|
||||
STA XXX_OUTSTAT
|
||||
ror
|
||||
ora #$7F
|
||||
sta CIA1_SDR // $DC0C
|
||||
cli
|
||||
ldx $A8 // XXX synchronize with aliases
|
||||
ldy $A7 // XXX synchronize with aliases
|
||||
pla
|
||||
rts
|
||||
|
||||
up9600_rsout_time:
|
||||
|
||||
cli
|
||||
lda #$FD
|
||||
sta TIME+2 // XXX check if this is the lowest byte
|
||||
|
||||
rs232_rsout_wait:
|
||||
|
||||
lda XXX_OUTSTAT
|
||||
beq !+
|
||||
bit TIME+2
|
||||
bmi up9600_rsout_wait
|
||||
|
||||
!:
|
||||
jmp $F490 // XXX
|
||||
|
||||
|
||||
#endif // CONFIG_RS232_UP9600
|
||||
Reference in new issue
Block a user