Files
open-roms/src/kernal/init/fce2.hw_entry_reset.s
T

79 lines
2.0 KiB
ArmAsm

// #LAYOUT# STD * #TAKE
// #LAYOUT# * KERNAL_0 #TAKE
// #LAYOUT# * * #IGNORE
// Resources describing the C64 reset sequence:
// https://www.c64-wiki.com/wiki/Reset_(Process)
hw_entry_reset:
// The GPL program at https://github.com/Klaus2m5/6502_65C02_functional_tests/blob/master/6502_functional_test.a65
// uses the similar initial reset sequence, affirmed by c64 PRG p269
sei // disable the interrupts, as fast as possible - they are disabled in case of HW reset,
// but this routine can be also called manually
cld // required for all CPUs - due to possibility of manual call
#if HAS_OPCODES_65CE02
see // disable extended stack
#endif
ldx #$FF
txs
#if ROM_LAYOUT_M65
jsr m65_reset_part
#endif
#if CONFIG_PLATFORM_COMMODORE_64
// The following routine is based on reading the public KERNAL jumptable routine
// list, and making unimaginative assumptions about what should be done on reset.
// Also, https://codebase64.org/doku.php?id=base:assembling_your_own_cart_rom_image was used
// as it shows example startup sequence, to be followe by cartridge creators
// C64 PRG p269
jsr cartridge_check
bne !+
jmp (ICART_COLD_START)
!:
// Disable the screen (and set 40 columns) to prevent visual glitches later
ldx #$28
stx VIC_SCROLX
#endif
// Initialising IO is obviously required. Also indicated by c64 prg p269.
jsr JIOINIT
// Setting up the screen and testing ram is obviously required
// also affirmed by p269 of c64 prg
jsr JRAMTAS // called RANTAM on Codebase64 wiki
// Resetting IO vectors is obviously required, if we want interrupts to run
// also affirmed by c64 prg p269
jsr JRESTOR
// "Compute's Mapping the 64" p236
jsr JCINT
#if ROM_LAYOUT_M65
clc
jsr M65_MODESET // on MEGA65 go to native mode by default
#endif
// What do we do when finished? A C64 jumps into the BASIC ROM
cli // allow interrupts to happen
// c64 prg p269
jmp (IBASIC_COLD_START)