mirror of https://github.com/stid/woz64.git
Too many things
This commit is contained in:
parent
1796e04cd1
commit
2184c0c95d
|
@ -29,62 +29,15 @@ coldStart: {
|
||||||
txs
|
txs
|
||||||
cld
|
cld
|
||||||
stx Vic.CR2 // Set Video Bits
|
stx Vic.CR2 // Set Video Bits
|
||||||
jsr Boot.initIRQ // Prepare IRQ
|
jsr Cia.init
|
||||||
|
jsr Sid.init
|
||||||
|
jsr MC6502.init
|
||||||
jsr Ram.init // Init memory.
|
jsr Ram.init // Init memory.
|
||||||
jsr Vic.init // Init video
|
jsr Vic.init // Init video
|
||||||
cli
|
cli
|
||||||
jmp warmStart
|
jmp warmStart
|
||||||
}
|
}
|
||||||
|
|
||||||
// --------------------------------------------------------
|
|
||||||
// initIRQ -
|
|
||||||
// Initialize Interrupt states after a cold start.
|
|
||||||
// Should never be executed as standard Init and should
|
|
||||||
// always be before it. This is extracted by c64 kernel
|
|
||||||
// routine IOINIT.
|
|
||||||
// --------------------------------------------------------
|
|
||||||
initIRQ: {
|
|
||||||
lda #$7F // KILL INTERRUPTS
|
|
||||||
sta Cia.C1ICR
|
|
||||||
sta Cia.C2ICR
|
|
||||||
|
|
||||||
sta Cia.C1PRA // TURN ON STOP KEY
|
|
||||||
|
|
||||||
lda #%00001000 // SHUT OFF TIMERS
|
|
||||||
sta Cia.C1CRA
|
|
||||||
sta Cia.C2CRA
|
|
||||||
sta Cia.C1CRB
|
|
||||||
sta Cia.C2CRB
|
|
||||||
|
|
||||||
// CONFIGURE PORTS
|
|
||||||
ldx #$00 // SET UP KEYBOARD INPUTS
|
|
||||||
stx Cia.C1DDRB // KEYBOARD INPUTS
|
|
||||||
stx Cia.C2DDRB // USER PORT (NO RS-232)
|
|
||||||
|
|
||||||
stx Sid.FMVC // TURN OFF SID
|
|
||||||
|
|
||||||
dex // set X = $FF
|
|
||||||
|
|
||||||
stx Cia.C1DDRA // KEYBOARD OUTPUTS
|
|
||||||
|
|
||||||
lda #%00000111 // SET SERIAL/VA14/15 (CLKHI)
|
|
||||||
sta Cia.C2PRA
|
|
||||||
|
|
||||||
lda #%00111111 // ;SET SERIAL IN/OUT, VA14/15OUT
|
|
||||||
sta Cia.C2DDRA
|
|
||||||
|
|
||||||
// SET UP THE 6510 LINES
|
|
||||||
lda #%00110111 // MOTOR OFF, HIRAM LOWRAM CHAREN HIGH
|
|
||||||
sta MC6502.ZR1 // set 1110 0111, motor off, enable I/O, enable KERNAL, Enable BASIC
|
|
||||||
|
|
||||||
lda #%00101111 // set 0010 1111, 0 = input, 1 = output
|
|
||||||
sta MC6502.ZR0 // save the 6510 I/O port direction register
|
|
||||||
|
|
||||||
rts
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// --------------------------------------------------------
|
// --------------------------------------------------------
|
||||||
// warmStart -
|
// warmStart -
|
||||||
// Restore pressed or program restart after first Power ON
|
// Restore pressed or program restart after first Power ON
|
||||||
|
|
|
@ -3,6 +3,34 @@
|
||||||
#import "../core/module.asm"
|
#import "../core/module.asm"
|
||||||
|
|
||||||
|
|
||||||
|
// ========================================================
|
||||||
|
// ////// PSEUDO MACROS ///////////////////////////////////
|
||||||
|
// ========================================================
|
||||||
|
|
||||||
|
.macro bitSet(bitMask, address) {
|
||||||
|
lda #bitMask
|
||||||
|
ora address
|
||||||
|
sta address
|
||||||
|
}
|
||||||
|
|
||||||
|
.macro bitClear(bitMask, address) {
|
||||||
|
lda #~bitMask
|
||||||
|
and address
|
||||||
|
sta address
|
||||||
|
}
|
||||||
|
|
||||||
|
.macro bitToggle(bitMask, address) {
|
||||||
|
lda #bitMask
|
||||||
|
eor address
|
||||||
|
sta address
|
||||||
|
}
|
||||||
|
|
||||||
|
.macro bitTest(bitMask, address) {
|
||||||
|
lda #bitMask
|
||||||
|
bit address
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// ========================================================
|
// ========================================================
|
||||||
// ////// PSEUDO COMMANDS /////////////////////////////////
|
// ////// PSEUDO COMMANDS /////////////////////////////////
|
||||||
// ========================================================
|
// ========================================================
|
||||||
|
|
|
@ -142,6 +142,8 @@ init: {
|
||||||
lda #$00
|
lda #$00
|
||||||
sta MemMap.VIDEO.CursorCol
|
sta MemMap.VIDEO.CursorCol
|
||||||
sta MemMap.VIDEO.CursorRow
|
sta MemMap.VIDEO.CursorRow
|
||||||
|
lda #%00000000
|
||||||
|
sta MemMap.VIDEO.StatusBitsA
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -229,10 +231,15 @@ sendChar: {
|
||||||
bcc noEndOfLine
|
bcc noEndOfLine
|
||||||
jsr screenNewLine // Yes? Add new line first
|
jsr screenNewLine // Yes? Add new line first
|
||||||
|
|
||||||
lda #1
|
bitTest(%00000001, MemMap.VIDEO.StatusBitsA)
|
||||||
cmp MemMap.VIDEO.ScrollUpTriggered
|
//lda #%00000001
|
||||||
|
//bit MemMap.VIDEO.StatusBitsA
|
||||||
bne noScrollTriggered
|
bne noScrollTriggered
|
||||||
|
|
||||||
|
// lda #1
|
||||||
|
// cmp MemMap.VIDEO.ScrollUpTriggered
|
||||||
|
// bne noScrollTriggered
|
||||||
|
|
||||||
// Compensate Scroll
|
// Compensate Scroll
|
||||||
sec
|
sec
|
||||||
lda MemMap.VIDEO.TempVideoPointer
|
lda MemMap.VIDEO.TempVideoPointer
|
||||||
|
@ -245,7 +252,6 @@ sendChar: {
|
||||||
noScrollTriggered:
|
noScrollTriggered:
|
||||||
noEndOfLine:
|
noEndOfLine:
|
||||||
pla
|
pla
|
||||||
|
|
||||||
// This is a backspace
|
// This is a backspace
|
||||||
cmp #BS
|
cmp #BS
|
||||||
bne !+
|
bne !+
|
||||||
|
@ -253,7 +259,6 @@ sendChar: {
|
||||||
sta (MemMap.VIDEO.TempVideoPointer), y
|
sta (MemMap.VIDEO.TempVideoPointer), y
|
||||||
ply
|
ply
|
||||||
jmp exit
|
jmp exit
|
||||||
|
|
||||||
!:
|
!:
|
||||||
// insert into screen
|
// insert into screen
|
||||||
sta (MemMap.VIDEO.TempVideoPointer), y
|
sta (MemMap.VIDEO.TempVideoPointer), y
|
||||||
|
@ -280,12 +285,27 @@ screenNewLine: {
|
||||||
cmp MemMap.VIDEO.CursorRow // Are we at the screen bottom?
|
cmp MemMap.VIDEO.CursorRow // Are we at the screen bottom?
|
||||||
bne noScrollUp
|
bne noScrollUp
|
||||||
jsr Video.scrollUp
|
jsr Video.scrollUp
|
||||||
lda #1 // Yes - Scroll up
|
|
||||||
sta MemMap.VIDEO.ScrollUpTriggered
|
bitSet(%00000001, MemMap.VIDEO.StatusBitsA)
|
||||||
|
|
||||||
|
|
||||||
|
//lda #%00000001
|
||||||
|
//ora MemMap.VIDEO.StatusBitsA
|
||||||
|
//sta MemMap.VIDEO.StatusBitsA
|
||||||
|
|
||||||
|
// lda #1 // Yes - Scroll up
|
||||||
|
// sta MemMap.VIDEO.ScrollUpTriggered
|
||||||
jmp done
|
jmp done
|
||||||
noScrollUp:
|
noScrollUp:
|
||||||
lda #0
|
|
||||||
sta MemMap.VIDEO.ScrollUpTriggered
|
bitClear(%00000001, MemMap.VIDEO.StatusBitsA)
|
||||||
|
|
||||||
|
// lda #%11111110
|
||||||
|
// and MemMap.VIDEO.StatusBitsA
|
||||||
|
// sta MemMap.VIDEO.StatusBitsA
|
||||||
|
|
||||||
|
//lda #0
|
||||||
|
//sta MemMap.VIDEO.ScrollUpTriggered
|
||||||
done:
|
done:
|
||||||
inc MemMap.VIDEO.CursorRow
|
inc MemMap.VIDEO.CursorRow
|
||||||
pla
|
pla
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
#importonce
|
#importonce
|
||||||
|
|
||||||
|
#import "../hardware/sid.asm"
|
||||||
|
|
||||||
.filenamespace Cia
|
.filenamespace Cia
|
||||||
// https://www.c64-wiki.com/wiki/CIA
|
// https://www.c64-wiki.com/wiki/CIA
|
||||||
|
|
||||||
|
@ -207,3 +209,45 @@
|
||||||
// %11 = Timer counts underflow of timer A if the CNT-pin is high
|
// %11 = Timer counts underflow of timer A if the CNT-pin is high
|
||||||
// Bit 7: 0 = Writing into the TOD register sets the clock time, 1 = Writing into the TOD register sets the alarm time.
|
// Bit 7: 0 = Writing into the TOD register sets the clock time, 1 = Writing into the TOD register sets the alarm time.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// ========================================================
|
||||||
|
// ////// METHODS /////////////////////////////////////////
|
||||||
|
// ========================================================
|
||||||
|
|
||||||
|
|
||||||
|
* = * "CIA HW"
|
||||||
|
|
||||||
|
init: {
|
||||||
|
lda #$7F // KILL INTERRUPTS
|
||||||
|
sta Cia.C1ICR
|
||||||
|
sta Cia.C2ICR
|
||||||
|
|
||||||
|
sta Cia.C1PRA // TURN ON STOP KEY
|
||||||
|
|
||||||
|
lda #%00001000 // SHUT OFF TIMERS
|
||||||
|
sta Cia.C1CRA
|
||||||
|
sta Cia.C2CRA
|
||||||
|
sta Cia.C1CRB
|
||||||
|
sta Cia.C2CRB
|
||||||
|
|
||||||
|
// CONFIGURE PORTS
|
||||||
|
ldx #$00 // SET UP KEYBOARD INPUTS
|
||||||
|
stx Cia.C1DDRB // KEYBOARD INPUTS
|
||||||
|
stx Cia.C2DDRB // USER PORT (NO RS-232)
|
||||||
|
|
||||||
|
stx Sid.FMVC // TURN OFF SID
|
||||||
|
|
||||||
|
dex // set X = $FF
|
||||||
|
|
||||||
|
stx Cia.C1DDRA // KEYBOARD OUTPUTS
|
||||||
|
|
||||||
|
lda #%00000111 // SET SERIAL/VA14/15 (CLKHI)
|
||||||
|
sta Cia.C2PRA
|
||||||
|
|
||||||
|
lda #%00111111 // ;SET SERIAL IN/OUT, VA14/15OUT
|
||||||
|
sta Cia.C2DDRA
|
||||||
|
|
||||||
|
rts
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,4 +22,23 @@ https://sta.c64.org/cbm64mem.html
|
||||||
// Bit #3: Datasette output signal level.
|
// Bit #3: Datasette output signal level.
|
||||||
// Bit #4: Datasette button status; 0 = One or more of PLAY, RECORD, F.FWD or REW pressed; 1 = No button is pressed.
|
// Bit #4: Datasette button status; 0 = One or more of PLAY, RECORD, F.FWD or REW pressed; 1 = No button is pressed.
|
||||||
// Bit #5: Datasette motor control; 0 = On; 1 = Off.
|
// Bit #5: Datasette motor control; 0 = On; 1 = Off.
|
||||||
// Default: $37, %00110111.
|
// Default: $37, %00110111.
|
||||||
|
|
||||||
|
// ========================================================
|
||||||
|
// ////// METHODS /////////////////////////////////////////
|
||||||
|
// ========================================================
|
||||||
|
|
||||||
|
|
||||||
|
* = * "mc6502 HW"
|
||||||
|
|
||||||
|
init: {
|
||||||
|
// SET UP THE 6510 LINES
|
||||||
|
lda #%00110111 // MOTOR OFF, HIRAM LOWRAM CHAREN HIGH
|
||||||
|
sta MC6502.ZR1 // set 1110 0111, motor off, enable I/O, enable KERNAL, Enable BASIC
|
||||||
|
|
||||||
|
lda #%00101111 // set 0010 1111, 0 = input, 1 = output
|
||||||
|
sta MC6502.ZR0 // save the 6510 I/O port direction register
|
||||||
|
rts
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,9 @@
|
||||||
TempVideoPointer: .word 0 // Pointer to video mem used to target char pos
|
TempVideoPointer: .word 0 // Pointer to video mem used to target char pos
|
||||||
CursorCol: .byte 0 // Actual cursor column position
|
CursorCol: .byte 0 // Actual cursor column position
|
||||||
CursorRow: .byte 0 // Actual cursor row position
|
CursorRow: .byte 0 // Actual cursor row position
|
||||||
ScrollUpTriggered: .byte 0 // Set to 1 if a scroll up was triggered
|
StatusBitsA: .byte 0 // Status Bits
|
||||||
|
// Bit0: ScrollUpTriggred if ON
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.namespace MATH {
|
.namespace MATH {
|
||||||
|
|
|
@ -22,4 +22,17 @@ https://www.c64-wiki.com/wiki/SID
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// ========================================================
|
||||||
|
// ////// METHODS /////////////////////////////////////////
|
||||||
|
// ========================================================
|
||||||
|
|
||||||
|
|
||||||
|
* = * "SID HW"
|
||||||
|
|
||||||
|
init: {
|
||||||
|
ldx #$00
|
||||||
|
stx Sid.FMVC // TURN OFF SID
|
||||||
|
rts
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,10 @@
|
||||||
|
|
||||||
.label VICREG = $D000
|
.label VICREG = $D000
|
||||||
|
|
||||||
.label CR2 = $D016 // Control register 2
|
.label CR2 = $D016 // Control register 2
|
||||||
|
.label INTE = $D01A // Interrupt enabled
|
||||||
|
.label RCNT = $D012 // Raster counter
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
* = * "VIC Functions"
|
* = * "VIC Functions"
|
||||||
|
|
|
@ -3,7 +3,9 @@
|
||||||
#import "../core/system.asm"
|
#import "../core/system.asm"
|
||||||
#import "../libs/print.asm"
|
#import "../libs/print.asm"
|
||||||
#import "../core/module.asm"
|
#import "../core/module.asm"
|
||||||
|
#import "../hardware/vic.asm"
|
||||||
#import "../devices/keyboard.asm"
|
#import "../devices/keyboard.asm"
|
||||||
|
#import "../hardware/mem_map.asm"
|
||||||
|
|
||||||
.filenamespace WozShell
|
.filenamespace WozShell
|
||||||
|
|
||||||
|
@ -35,9 +37,49 @@ start: {
|
||||||
PrintLine(lineString)
|
PrintLine(lineString)
|
||||||
PrintLine(aboutString)
|
PrintLine(aboutString)
|
||||||
PrintLine(lineString)
|
PrintLine(lineString)
|
||||||
|
|
||||||
|
//jsr WozShell.startCursor
|
||||||
jmp WozShell.loop
|
jmp WozShell.loop
|
||||||
}
|
}
|
||||||
|
|
||||||
|
startCursor: {
|
||||||
|
sei
|
||||||
|
lda #$01
|
||||||
|
sta Vic.INTE
|
||||||
|
|
||||||
|
lda #<cursortInt
|
||||||
|
ldx #>cursortInt
|
||||||
|
|
||||||
|
sta $314 // store in $314/$315
|
||||||
|
stx $315
|
||||||
|
|
||||||
|
lda #$00
|
||||||
|
sta Vic.RCNT
|
||||||
|
|
||||||
|
lda $d011
|
||||||
|
and #$7f
|
||||||
|
sta $d011
|
||||||
|
|
||||||
|
cli
|
||||||
|
|
||||||
|
rts
|
||||||
|
|
||||||
|
cursortInt: {
|
||||||
|
dec $d019 // ACK INT
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
pla
|
||||||
|
tay
|
||||||
|
pla
|
||||||
|
tax
|
||||||
|
pla
|
||||||
|
rti
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------
|
||||||
loop: {
|
loop: {
|
||||||
jsr Keyboard.waitForKey
|
jsr Keyboard.waitForKey
|
||||||
|
@ -291,7 +333,6 @@ wozExec: {
|
||||||
!:
|
!:
|
||||||
PrintChar()
|
PrintChar()
|
||||||
rts
|
rts
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -301,7 +342,7 @@ wozExec: {
|
||||||
|
|
||||||
* = * "WozShell Data"
|
* = * "WozShell Data"
|
||||||
module_type: .byte Module.TYPES.PROG
|
module_type: .byte Module.TYPES.PROG
|
||||||
version: .byte 1, 2, 0
|
version: .byte 1, 5, 0
|
||||||
|
|
||||||
.encoding "screencode_mixed"
|
.encoding "screencode_mixed"
|
||||||
module_name:
|
module_name:
|
||||||
|
@ -321,7 +362,7 @@ helpString:
|
||||||
.byte $8e, 0
|
.byte $8e, 0
|
||||||
|
|
||||||
aboutString:
|
aboutString:
|
||||||
.text "woz64 mon - v 1.2.0"
|
.text "woz64 mon - v 1.5.0"
|
||||||
.byte $8e, 0
|
.byte $8e, 0
|
||||||
lineString:
|
lineString:
|
||||||
.text "----------------------------------------"
|
.text "----------------------------------------"
|
||||||
|
|
Loading…
Reference in New Issue