segunda-feira, 9 de maio de 2016

Autoboot na Beta

Tenho dedicado meu tempo livre no disassembly da ROM da interface da Cheyenne (CAS) e percebi uma coisa.


Não chega a ser um ovo de páscoa (Easter egg), mas uma simplificação no programa. A interface da CAS é muito semelhante à Beta 48, que usa uma ROM de 8 KB ao invés de 16 KB da CBI.  Por causa disto, percebe-se uma certa otimização para economia de espaço de memória.

A Beta 48 possui o recurso autoboot que roda automaticamente um programa BASIC gravado com nome "boot" no disco, se este estiver no drive A quando o DOS é inicializado. Também é sabido que os comandos LOAD e RUN do DOS, quando são digitados sem argumento (string com nome de arquivo), tenta rodar o programa "boot".  A surpresa é que os comandos MERGE, PEEK e POKE também tem o mesmo efeito: digitado sem nenhum parâmetro, tenta carregar o "boot".
;---------------------------------------------------------------------
; Subroutine: LOAD ARGuments
; Address: #29A9/10665
; Fetch arguments for LOAD, PEEK, POKE, RUN and MERGE statements.
; Called by: FILELOAD, DS_MERGE.
;---------------------------------------------------------------------
LOADARG
;sub_29a9h
    call NOARG          ; Check argument and if none is found, execute
    jp z,RUNBOOT        ;{l220dh} 'RUN "boot"' statement.
Isto ocorre porque estes cinco comandos usam a mesma sub-rotina para analisar os argumentos e, não encontrando nenhum, pula para a rotina RUNBOOT:
;-----------------------------------------------------------------------
; Routine: RUN BOOT (#220D/8717)
; Put 'RUN "boot"' statement into line editor and execute it.
; Entry point used by LOADARG.
;-----------------------------------------------------------------------RUNBOOT
;l220dh
    ld hl,(E_LINE)      ; HL is pointer for line editor memory.
    ld a,#FE            ; Set #FE flag to supress any error message
    ld (CLR_WSP),a      ;
being printed on screen.
    ld (hl),#F7         ; 'RUN', a BASIC token.
    inc hl   
    ld (hl),#22         ; '"'.
    inc hl   
    ld (hl),#62         ; 'b'.
    inc hl   
    ld (hl),#6F         ; 'o'.
    inc hl   
    ld (hl),#6F         ; 'o'.
    inc hl   
    ld (hl),#74         ; 't'.
    inc hl   
    ld (hl),#22         ; '"'.
    inc hl   
    ld (K_CUR),hl       ; Place editor cursor after last quotation
                        ;mark.
    ld (hl),#0D         ; Place 'Enter' there.
    inc hl   
    ld (hl),#80         ; Place end separator in the next position.
    inc hl   
    ld (WORKSP),hl      ; Adjust memory separator system variables
    ld (STKBOT),hl      ;
to the end of line editor.
    ld (STKEND),hl
    set 3,(iy+1)        ; Set bit 3 of FLAGS to select L type cursor.
    jr DOS_CLI04        ;{l227eh} Jump to interpret and execute command
                        ;line.
Pode-se dizer que a checagem de sintaxe da Beta/CAS não é tão estrita e restritiva como da Sinclair BASIC.

Nenhum comentário:

Postar um comentário

Seu comentário é bem vindo, mas peço que use este espaço adequadamente.