        ORG     0
;
; SIO REV 1 LOADER FOR ALTAIR BASIC
;
;  ** FOR VERSIONS < 4.0 SET SENSE SWITCHES A11, A10 ON **
;  ** FOR VERSIONS >= 4.0 SET SENSE SWITCHES OFF **
;
; H = MSB OF LOAD ADDRESS
; L = LSB OF LOAD ADDRESS = LENGTH OF LOADER = LEADER BYTE

;       LXI     H,00F7DH        ;4K BASIC V3.0
;       LXI     H,00FAEH        ;4K BASIC V3.2
;       LXI     H,00FC2H        ;4K BASIC V4.0
;       LXI     H,01F7DH        ;8K BASIC V3.0, V3.1
;       LXI     H,01FAEH        ;8K BASIC V3.2
;       LXI     H,01FC2H        ;8K BASIC V4.0
        LXI     H,02FAEH        ;EXTENDED BASIC V3.2
;       LXI     H,03FC2H        ;EXTENDED BASIC V4.0, V4.1
;       LXI     H,07EC2H        ;EXTENDED DISK BASIC V5.0

LOOP:   LXI     SP,STACK        ;INIT SP SO A RET JUMPS TO LOOP
        IN      00H             ;GET SIO STATUS
        RRC                     ;NEW BYTE AVAILABLE?
        RC                      ;NO (JUMPS BACK TO LOOP)
        IN      01H             ;GET THE BYTE
        CMP     L               ;NEW BYTE = LEADER BYTE?
        RZ                      ;YES (JUMPS BACK TO LOOP)
        DCR     L               ;NOT LEADER, DECREMENT ADDRESS
        MOV     M,A             ;STORE THE BYTE (REVERSE ORDER)
        RNZ                     ;LOOP UNTIL L = 0
        PCHL                    ;JUMP TO CODE JUST DOWNLOADED

STACK:  DW      LOOP

        END
