Closed DamnedAngel closed 1 year ago
Correction:
[2:54 PM, 2/5/2023] +55 11 99156-0918: No fim, o msxromcrt0.s ficou funcionando assim: [2:54 PM, 2/5/2023] +55 11 99156-0918: ;---------------------------------------------------------- ; Step 1: Initialize heap pointer init:: ld hl, #_HEAP_start ld (#_heap_top), hl
;----------------------------------------------------------
; Step 4: Enables page 2 on the same slot/subslot as page 1
; (useful for 32kb ROMs on pages 1 and 2)
.if SET_PAGE_2
di
call #BIOS_RSLREG
rrca
rrca
and #0x03
ld c, a
ld hl, #BIOS_EXPTBL
add a, l
ld l, a
ld a, (hl)
and #0x80
or c
ld c, a
inc l
inc l
inc l
inc l
ld a, (hl)
and #0x0c
or c
ld h, #0x80
call #BIOS_ENASLT
ei
.endif
;---------------------------------------------------------- ; Step 2: Initialize globals call gsinit
;---------------------------------------------------------- ; Step 3: Sets stack to HIMEM .ifne RETURN_TO_BASIC .if STACK_HIMEM di ld sp, (#BIOS_HIMEM) ;Stack at the top of memory. ei .endif .endif
;---------------------------------------------------------- ; Step 5: Run application .if RETURN_TO_BASIC jp _main .else call _main RST 0 ;CHKRAM .endif
Fixed gsinit falling for on 2nd page of the program before the 2nd page is configured. Fixed seeting stack to HIMEM. Routine was protected by wrong .if clauses.
Order now is: Step 1: Initialize heap pointer Step 2: Enables page 2 on the same slot/subslot as page 1 Step 3: Sets stack to HIMEM Step 4: Initialize globals (gsinit) Step 5: Run application
[22:38, 23/08/2022] Danilo MSX: a CRT0 tá toda quebrada... não está inicializando as variáveis globais nem quando o programa funciona [22:39, 23/08/2022] Danilo MSX: seguinte [22:39, 23/08/2022] Danilo MSX: faz um teste [22:39, 23/08/2022] Danilo MSX: Vai na sua CRT0 [22:39, 23/08/2022] Danilo MSX: e move o step 4 para antes do step 2 [22:47, 23/08/2022] Danilo MSX: acontece que quando o seu código fica maior que ~16k, a gsinit cai na página 2 ($8000-$bfff) [22:48, 23/08/2022] Danilo MSX: Só que a mapeamento de slot padrão tem a página 2 no slot 2 que é RAM [22:48, 23/08/2022] Rodrigo: é, o código em ROM passou dos 16K há alguns dias. E logo depois criei algumas outras variáveis globais, daí ferrou tudo [22:49, 23/08/2022] Danilo MSX: ai, nese passo 2, eu tento chamar a gsinit, cujo endereço DEVERIA estar apontando para a ROM, mas no seu caso está apontando para a RAM [22:49, 23/08/2022] Danilo MSX: e está apontando para a RAM porque ainda não executou isso [22:50, 23/08/2022] Danilo MSX: ou seja, esse passo 4 precisa ser executado antes do 2.