; ======================================================================
; XANDRIAN LABS  /  CS617 CHAPTER 02
; ======================================================================
; Program    : Chapter 02 Sorting
; Source     : app/boot.inc
; Revision   : x0.31a-dev / comment-harmonization pass
; Target     : Casio PB-2000C / HD61700
; Role       : Initialize the machine and enter the RAM-resident app.
; Interface  : MAIN, RAM_ENTRY, APP_ENTRY; platform boot vectors.
; Maintainer : Xandrian Labs
; ----------------------------------------------------------------------
; Boot stages cross an explicit ROM-to-RAM execution boundary.
; ======================================================================

        ORG     &H0E80

; PURPOSE : Establish firmware context before RAM relocation.
; EFFECTS : Initializes stack/LCD path and jumps to LOADER.
MAIN:
        PRE     SS,&H0100

        LD      $30,1
        LD      $31,0
        PSR     SZ,0
        PSR     SY,30
        PSR     SX,31

        PST     UA,&H14
        CAL     OFFCHK
        PPO     &HC0

        LDW     $0,&H12B5
BOOT_DELAY:
        SBW     $0,$SY
        JR      NZ,BOOT_DELAY

        CAL     &H02D4

        PPO     &HC3
        LD      $0,&H0C
        LDW     $1,&H3000
        STLM    $0,3

        LD      $6,$SX
        LD      $8,128
        CAL     &H018D

        CAL     &H0304
        CAL     &H0306

        JP      LOADER

; PURPOSE : Validate RAM bank, initialize experiment and splash.
; EFFECTS : Prepares DATA before entering the main menu.
RAM_ENTRY:
        GST     UA,$0
        SBC     $0,&H55
        JR      Z,RAM_OK

RAM_HALT:
        JR      RAM_HALT

RAM_OK:
        CAL     INIT_SETUP

        CAL     VALIDATE_CFG
        AN      $4,$4
        JR      NZ,RAM_HALT

        CAL     GEN_DATA
        CAL     CLEAR_ALL
        CAL     SHOW_SPLASH
        CAL     WAIT_SPLASH
        JP      APP_ENTRY

; PURPOSE : Enter the menu with a fresh app stack context.
; EFFECTS : Does not regenerate DATA on every menu return.
APP_ENTRY:
        PRE     SS,&H0100
        LD      $30,1
        LD      $31,0
        PSR     SZ,0
        PSR     SY,30
        PSR     SX,31
        GST     UA,$0
        SBC     $0,&H55
        JP      NZ,RAM_HALT
        JP      SHOW_MENU
; end of include