106 lines
3.3 KiB
ArmAsm
Executable file
106 lines
3.3 KiB
ArmAsm
Executable file
.scope STARTUP
|
|
;;; -*- Mode: asm; indent-tabs-mode: t; tab-width: 8 -*-
|
|
;; Settings positions
|
|
CR1 = $d011; Graphic settings
|
|
VIC_bank_settings = $DD00 ; Vic position
|
|
Screen_RAM_settings =$D018 ; Screen RAM position relative to VIC
|
|
|
|
;;########## VIC_BANK ################
|
|
;;# BITMAP | $4000 -$5F3F
|
|
;;# Unused? | $5F3F - $6000
|
|
;;# SCREAN RAM (color) | $6000 -$63E7
|
|
;;# Unused? | $63E8 - $7FFF
|
|
;;#
|
|
;;####################################
|
|
|
|
;; Memory positions
|
|
VIC_bank = $4000
|
|
VIC_bank_end = VIC_bank + $3FFF
|
|
|
|
Bitmap = VIC_bank
|
|
Bitmap_end = $5F3F
|
|
|
|
Screen_RAM = $2000 + VIC_bank
|
|
Screen_RAM_end = Screen_RAM + $03E7
|
|
|
|
Character_generator_ROM = $D000
|
|
|
|
;; Free upp memory
|
|
;; https://www.c64-wiki.com/wiki/Bank_Switching
|
|
|
|
;; Sets grafic mode [Standard bitmap mode]
|
|
;; https://www.c64-wiki.com/wiki/Standard_Bitmap_Mode
|
|
LDA #%10111111 ; ECM = False
|
|
AND CR1
|
|
STA CR1
|
|
|
|
LDA #%00100000; BMM = True
|
|
ORA CR1
|
|
STA CR1
|
|
|
|
;; Set VIC bank to bank 1
|
|
;; https://www.c64-wiki.com/wiki/VIC_bank
|
|
LDA #%11111110 ;bit_0 = False
|
|
AND VIC_bank_settings
|
|
STA VIC_bank_settings
|
|
|
|
LDA #%00000010; bit_1 = True
|
|
ORA VIC_bank_settings
|
|
STA VIC_bank_settings
|
|
|
|
;; Set Scren-RAM to offset 8 ;https://www.c64-wiki.com/wiki/53272 (offset is 8k byte = 1024*8-ich)
|
|
LDA #%10001111 ; bit_6 =bit_5=bit_4 = Falsw
|
|
AND Screen_RAM_settings
|
|
STA Screen_RAM_settings
|
|
|
|
LDA #%10000000; bit_1 = True
|
|
ORA Screen_RAM_settings
|
|
STA Screen_RAM_settings
|
|
|
|
;; Paint the bitmap black. More bitmap: https://www.c64-wiki.com/wiki/53272, https://www.c64-wiki.com/wiki/Screen_RAM#Moving_of_screen_RAM
|
|
Mov_16 B_start, B_start + 1, #<VIC_bank, #>VIC_bank
|
|
Mov_16 B_end, B_end + 1, #<$5f3f, #>$5f3f
|
|
LDA #$00
|
|
jsr memset
|
|
|
|
|
|
;; Sets the screen color to black and white
|
|
Mov_16 B_start, B_start + 1, #<Screen_RAM, #>Screen_RAM
|
|
Mov_16 B_end, B_end + 1, #<Screen_RAM_end, #>Screen_RAM_end
|
|
LDA #%11110000
|
|
jsr memset
|
|
|
|
;; Disable maskeble interups (not all)
|
|
SEI
|
|
;; Disable BASIC ROM mohahaha
|
|
LDA #%11111110
|
|
AND $0001
|
|
STA $0001
|
|
; https://www.c64-wiki.com/wiki/Bank_Switching
|
|
; Disable IO, CHAREN =0
|
|
LDA #%11111011
|
|
AND $0001
|
|
STA $0001
|
|
|
|
;;Disable non maskable interupts
|
|
;;https://codebase64.org/doku.php?id=base:nmi_lock_without_kernal
|
|
;; write to $FFFA/$FFFB possible (and needed) if BASIC ROM is disabled
|
|
|
|
LDA #<NMI_routine
|
|
STA $FFFA
|
|
LDA #>NMI_routine
|
|
STA $FFFB
|
|
LDA #$00 ;; stop Timer A
|
|
STA $DD0E
|
|
STA $DD04 ;; set Timer A to 0, after starting
|
|
STA $DD05 ;; NMI will occur immediately
|
|
LDA #$81
|
|
STA $DD0D ;; set Timer A as source for NMI
|
|
LDA #$01
|
|
STA $DD0E ;; start Timer A -> NMI
|
|
;; from here on NMI is disabled
|
|
JMP NMI_routine_end
|
|
NMI_routine:
|
|
RTI ;; exit interrupt not acknowledged
|
|
NMI_routine_end:
|
|
.endscope
|