REL

The first piece of OS-9 Level 1 loads from the boot track (track 34, sectors 1-18) into memory starting at $2600.

A 2 byte execution start address follows the two-byte signature 'OS'.

The RELocate code copies the boot track from $2600 up into $F0001) and transfers control there into the Kernel (part 1) module after RELocation.

            ORG   $2602

EXECADDR    FDB   REL         ;2602: 26 0C         EXECUTION START ADDRESS
OS9_BOOT    FCC   "OSy`BOOT"  ;2604: 4F 53 79 60 42 4F 4F 54 OS-9 BOOT SCREEN STRING

; START OF REL "MODULE"
REL         CLR   PIA0BC      ;260C: 7F FF 03      DISABLE VSYNC
            STA   SAMTYSET    ;260F: B7 FF DF      SAM MAP TYPE=1 "ALL RAM"
            LDB   #$06        ;2612: C6 06         SET COUNTDOWN TO CLEAR 7 BITS (B=6)
            LDX   #SAMF0CLR   ;2614: 8E FF C6      START WITH SAM DISPLAY OFFSET F0 BIT
REL10       STA   ,X++        ;2617: A7 81         CLEAR THE DISPLAY OFFSET BIT THEN X=X+2
            DECB              ;2619: 5A            COUNT DOWN 1
            BNE   REL10       ;261A: 26 FB         DID WE CLEAR OUR 7TH BIT (B=0)
            STA   $01,X       ;261C: A7 01         YES, SET DISPLAY OFFSET SCREEN AT $8000

; CLEAR SCREEN WITH SPACES
            LDX   #M8000      ;261E: 8E 80 00      ADDRESS OF NEW TEXT SCREEN TO START CLEARING
            LDY   #M0200      ;2621: 10 8E 02 00   THERE ARE 512 BYTES IN A TEXT SCREEN TO CLEAR
            LDA   #$60        ;2625: 86 60         LETS CLEAR IT WITH A SPACE
REL20       STA   ,X+         ;2627: A7 80         PUT THE SPACE ONTO THE SCREEN
            DEY               ;2629: 31 3F         COUNT DOWN 1
            BNE   REL20       ;262B: 26 FA         IF COUNT NOT YET ZERO, GO BACK TO REL20

; PUT BANNER ONTO SCREEN
            LDX   #M810C      ;262D: 8E 81 0C      ADDRESS OF SCREEN LOCATION TO PRINT AT
            LEAY  OS9_BOOT,PCR  ;2630: 31 8C D1    POINT TO START OF STRING
            LDB   #$08        ;2633: C6 08         SET THE LENGTH OF THE STRING
REL30       LDA   ,Y+         ;2635: A6 A0         LOAD A BYTE FROM STRING AND UPDATE PTR
            STA   ,X+         ;2637: A7 80         STORE THE BYTE ONTO THE SCREEN AND UPDATE PTR
            DECB              ;2639: 5A            COUNT DOWN ONE CHARACTER PRINTED
            BNE   REL30       ;263A: 26 F9         IF COUNT NOT YET ZERO, GO BACK TO REL30

; FIXME WHAT IS THIS
            TST   M0072       ;263C: 0D 72         FIXME TEST ALREADY RELOCATED FLAG?
            BEQ   REL50       ;263E: 27 13         YES, ALREADY RELOCATED JUST GO THERE

; START RELOCATING
            LEAU  >BOOTSIG,PCR  ;2640: 33 8D FF BC THE SOURCE ADDRESS TO RELOCATE FROM?
            LDX   #M0F00      ;2644: 8E 0F 00      HOW MANY BYTES ARE WE RELOCATING?
            LDY   #MF000      ;2647: 10 8E F0 00   WHERE ARE WE RELOCATING THEM TO?
REL40       LDA   ,U+         ;264B: A6 C0         GRAB 2 BYTES FROM SOURCE AND INCREMENT
            STA   ,Y+         ;264D: A7 A0         STORE AT DESTINATION AND INCREMENT
            DEX               ;264F: 30 1F         COUNT DOWN OUR NUMBER OF BYTES TO RELOCATE
            BNE   REL40       ;2651: 26 F8         IF COUNT NOT YET ZERO, GO BACK TO REL40

; RELOCATION COMPLETE, PREPARE FOR OS9 MODULE COLD START
REL50       JMP   ZF056       ;2653: 7E F0 56      JUMP TO RELOCATED MODULES
            LEAX  <M01SYNC,PCR  ;2656: 30 8C 04    LOCATE OS9 MODULE START
            LDD   $09,X       ;2659: EC 09         LOCATE OS9 EXEC ADDRESS
            JMP   D,X         ;265B: 6E 8B         JUMP INTO OS9 MODULE

OS-9