Too many things

This commit is contained in:
stid 2020-01-20 18:09:18 -08:00
parent 1796e04cd1
commit 2184c0c95d
9 changed files with 187 additions and 64 deletions

View File

@ -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

View File

@ -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 /////////////////////////////////
// ========================================================

View File

@ -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

View File

@ -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
}

View File

@ -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
}

View File

@ -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 {

View File

@ -22,4 +22,17 @@ https://www.c64-wiki.com/wiki/SID
// ========================================================
// ////// METHODS /////////////////////////////////////////
// ========================================================
* = * "SID HW"
init: {
ldx #$00
stx Sid.FMVC // TURN OFF SID
rts
}

View File

@ -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"

View File

@ -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 "----------------------------------------"