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
|
||||
cld
|
||||
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 Vic.init // Init video
|
||||
cli
|
||||
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 -
|
||||
// Restore pressed or program restart after first Power ON
|
||||
|
|
|
@ -3,6 +3,34 @@
|
|||
#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 /////////////////////////////////
|
||||
// ========================================================
|
||||
|
|
|
@ -142,6 +142,8 @@ init: {
|
|||
lda #$00
|
||||
sta MemMap.VIDEO.CursorCol
|
||||
sta MemMap.VIDEO.CursorRow
|
||||
lda #%00000000
|
||||
sta MemMap.VIDEO.StatusBitsA
|
||||
rts
|
||||
}
|
||||
|
||||
|
@ -229,10 +231,15 @@ sendChar: {
|
|||
bcc noEndOfLine
|
||||
jsr screenNewLine // Yes? Add new line first
|
||||
|
||||
lda #1
|
||||
cmp MemMap.VIDEO.ScrollUpTriggered
|
||||
bitTest(%00000001, MemMap.VIDEO.StatusBitsA)
|
||||
//lda #%00000001
|
||||
//bit MemMap.VIDEO.StatusBitsA
|
||||
bne noScrollTriggered
|
||||
|
||||
// lda #1
|
||||
// cmp MemMap.VIDEO.ScrollUpTriggered
|
||||
// bne noScrollTriggered
|
||||
|
||||
// Compensate Scroll
|
||||
sec
|
||||
lda MemMap.VIDEO.TempVideoPointer
|
||||
|
@ -245,7 +252,6 @@ sendChar: {
|
|||
noScrollTriggered:
|
||||
noEndOfLine:
|
||||
pla
|
||||
|
||||
// This is a backspace
|
||||
cmp #BS
|
||||
bne !+
|
||||
|
@ -253,7 +259,6 @@ sendChar: {
|
|||
sta (MemMap.VIDEO.TempVideoPointer), y
|
||||
ply
|
||||
jmp exit
|
||||
|
||||
!:
|
||||
// insert into screen
|
||||
sta (MemMap.VIDEO.TempVideoPointer), y
|
||||
|
@ -280,12 +285,27 @@ screenNewLine: {
|
|||
cmp MemMap.VIDEO.CursorRow // Are we at the screen bottom?
|
||||
bne noScrollUp
|
||||
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
|
||||
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:
|
||||
inc MemMap.VIDEO.CursorRow
|
||||
pla
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
#importonce
|
||||
|
||||
#import "../hardware/sid.asm"
|
||||
|
||||
.filenamespace 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
|
||||
// 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 #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.
|
||||
// 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
|
||||
CursorCol: .byte 0 // Actual cursor column 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 {
|
||||
|
|
|
@ -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 CR2 = $D016 // Control register 2
|
||||
.label CR2 = $D016 // Control register 2
|
||||
.label INTE = $D01A // Interrupt enabled
|
||||
.label RCNT = $D012 // Raster counter
|
||||
|
||||
|
||||
|
||||
* = * "VIC Functions"
|
||||
|
|
|
@ -3,7 +3,9 @@
|
|||
#import "../core/system.asm"
|
||||
#import "../libs/print.asm"
|
||||
#import "../core/module.asm"
|
||||
#import "../hardware/vic.asm"
|
||||
#import "../devices/keyboard.asm"
|
||||
#import "../hardware/mem_map.asm"
|
||||
|
||||
.filenamespace WozShell
|
||||
|
||||
|
@ -35,9 +37,49 @@ start: {
|
|||
PrintLine(lineString)
|
||||
PrintLine(aboutString)
|
||||
PrintLine(lineString)
|
||||
|
||||
//jsr WozShell.startCursor
|
||||
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: {
|
||||
jsr Keyboard.waitForKey
|
||||
|
@ -291,7 +333,6 @@ wozExec: {
|
|||
!:
|
||||
PrintChar()
|
||||
rts
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -301,7 +342,7 @@ wozExec: {
|
|||
|
||||
* = * "WozShell Data"
|
||||
module_type: .byte Module.TYPES.PROG
|
||||
version: .byte 1, 2, 0
|
||||
version: .byte 1, 5, 0
|
||||
|
||||
.encoding "screencode_mixed"
|
||||
module_name:
|
||||
|
@ -321,7 +362,7 @@ helpString:
|
|||
.byte $8e, 0
|
||||
|
||||
aboutString:
|
||||
.text "woz64 mon - v 1.2.0"
|
||||
.text "woz64 mon - v 1.5.0"
|
||||
.byte $8e, 0
|
||||
lineString:
|
||||
.text "----------------------------------------"
|
||||
|
|
Loading…
Reference in New Issue