more sane directory name, updated binaries

This commit is contained in:
FeralChild64 committed 2020-06-26 19:44:01 +02:00
1 parent d4d32095d1
commit 76aaf298b8
697 files changed
+56 -56

No files matched your search

+17
View File
@@ -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
+51
View File
@@ -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
+17
View File
@@ -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
+46
View File
@@ -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
+17
View File
@@ -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
+17
View File
@@ -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
+26
View File
@@ -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
+45
View File
@@ -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
+17
View File
@@ -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
+63
View File
@@ -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
+29
View File
@@ -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
+46
View File
@@ -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
+134
View File
@@ -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
+21
View File
@@ -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
+21
View File
@@ -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
+43
View File
@@ -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
+69
View File
@@ -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
+46
View File
@@ -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
+59
View File
@@ -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