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".
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:Pode-se dizer que a checagem de sintaxe da Beta/CAS não é tão estrita e restritiva como da Sinclair BASIC.;-----------------------------------------------------------------------
; 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.
Nenhum comentário:
Postar um comentário
Seu comentário é bem vindo, mas peço que use este espaço adequadamente.