imported more UP9600 code
This commit is contained in:
1 parent
35278b9719
commit
df1285e5f3
7 files changed
+177
-5
No files matched your search
@@ -4,11 +4,11 @@
|
||||
//
|
||||
|
||||
|
||||
#if HAS_RS232
|
||||
#if CONFIG_RS232_UP2400
|
||||
|
||||
|
||||
ckout_rs232:
|
||||
STUB_IMPLEMENTATION() // XXX provide implementation for both UP2400 and UP9600
|
||||
|
||||
|
||||
#endif // HAS_RS232
|
||||
#endif // CONFIG_RS232_UP2400
|
||||
@@ -0,0 +1,23 @@
|
||||
|
||||
//
|
||||
// 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
|
||||
@@ -20,7 +20,8 @@ open_rs232:
|
||||
jsr rs232_count_channels
|
||||
bcs open_rs232_end
|
||||
|
||||
// Allocate buffer
|
||||
// Allocate buffers - first RIBUF, afterwards ROBUF
|
||||
// (checked addresses on original ROMs)
|
||||
|
||||
lda MEMSIZK+0
|
||||
sta ROBUF+0
|
||||
@@ -28,11 +29,13 @@ open_rs232:
|
||||
|
||||
dec MEMSIZK+1
|
||||
lda MEMSIZK+1
|
||||
sta ROBUF+1 // XXX RIBUF or ROBUF?
|
||||
sta RIBUF+1
|
||||
|
||||
dec MEMSIZK+1
|
||||
lda MEMSIZK+1
|
||||
sta RIBUF+1 // XXX RIBUF or ROBUF?
|
||||
sta ROBUF+1
|
||||
|
||||
// Initialize buffer indexes
|
||||
|
||||
lda #$00
|
||||
sta RIDBE
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
|
||||
//
|
||||
// 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,66 @@
|
||||
|
||||
//
|
||||
// Enable UP9600 interface
|
||||
//
|
||||
|
||||
// Based on UP9600 code by Daniel Dallman with Bo Zimmerman adaptations
|
||||
|
||||
|
||||
#if CONFIG_RS232_UP9600
|
||||
|
||||
|
||||
up9600_enable: // XXX adapt
|
||||
|
||||
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
|
||||
|
||||
|
||||
#endif // CONFIG_RS232_UP9600
|
||||
@@ -0,0 +1,18 @@
|
||||
|
||||
//
|
||||
// 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,18 @@
|
||||
|
||||
//
|
||||
// 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
|
||||
Reference in new issue
Block a user