X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libsrc%2Fcommon%2Fmodload.s;h=63776f1c8ea17af25042b83666e115d6a1afd039;hb=b256d6fb46c1e17baa2a4bce47bbb21c9e931720;hp=4385b1a08260bdfd7da05ef5e623c685d73d7273;hpb=9c7d2191aaa0ef15c8af50a9d47715d03894e1aa;p=cc65 diff --git a/libsrc/common/modload.s b/libsrc/common/modload.s index 4385b1a08..63776f1c8 100644 --- a/libsrc/common/modload.s +++ b/libsrc/common/modload.s @@ -63,7 +63,7 @@ RegBankSave: .res 6 ; Save area for register bank ; The header of the o65 file. Since we don't need the first 8 bytes any ; longer, once we've checked them, we will overlay them with other data to ; save a few bytes. -Header: .res O65_HDR_SIZE ; The o65 header +Header: .tag O65_HDR ; The o65 header ; Input InputByte = Header ; Byte read from input @@ -76,10 +76,10 @@ Read: jmp $FFFF ; Jump to read routine .rodata ExpectedHdr: - .byte $01, $00 ; non C64 marker - .byte $6F, $36, $35 ; Magic ("o65") - .byte $00 ; Version - .word O65_CPU_6502|O65_RELOC_BYTE|O65_SIZE_16BIT|O65_FTYPE_EXE|O65_ADDR_SIMPLE|O65_ALIGN_1 + .byte O65_MARKER_0, O65_MARKER_1 ; non C64 marker + .byte O65_MAGIC_0, O65_MAGIC_1, O65_MAGIC_2 ; Magic ("o65") + .byte O65_VERSION ; Version + .word O65_MODE_CC65 ; Mode word ExpectedHdrSize = * - ExpectedHdr @@ -90,7 +90,7 @@ ExpectedHdrSize = * - ExpectedHdr .code PushCallerData: - ldy #MODCTRL_CALLERDATA+1 + ldy #MOD_CTRL::CALLERDATA+1 lda (Ctrl),y tax dey @@ -158,7 +158,6 @@ ReadByte: ReadAndCheckError: sta ReadSize stx ReadSize+1 - jsr pushax jsr Read ; Check the return code and bail out in case of problems @@ -201,17 +200,16 @@ CleanupAndExit: ; Check if we have to free the allocated block - lda Module - ora Module+1 - beq @L1 ; Jump if no memory allocated - lda Module ldx Module+1 - jsr _free ; Free the allocated block + bne @L1 + tay ; Test high byte + beq @L2 +@L1: jsr _free ; Free the allocated block ; Restore the register bank -@L1: jsr RestoreRegBank +@L2: jsr RestoreRegBank ; Restore the error code and return to the caller @@ -337,7 +335,7 @@ _mod_load: ; Get the read function pointer from the control structure and place it into ; our call vector - ldy #MODCTRL_READ + ldy #MOD_CTRL::READ lda (Ctrl),y sta Read+1 iny @@ -350,7 +348,7 @@ _mod_load: lda #
Header jsr pushax - lda #O65_HDR_SIZE + lda #.sizeof(O65_HDR) ldx #0 ; Always less than 256 jsr ReadAndCheckError ; Bails out in case of errors @@ -391,17 +389,17 @@ Opt: jsr ReadByte ; Read the length byte bne OSError jsr ReadByte ; Get the operating system - cmp #O65_OS_CC65_MODULE + cmp #O65_OS_CC65 bne OSError ; Wrong operating system jsr ReadByte ; Get the version number, expect zero bne OSError ; Wrong version jsr ReadByte ; Get low byte of id - ldy #MODCTRL_MODULE_ID + ldy #MOD_CTRL::MODULE_ID sta (Ctrl),y jsr ReadByte - ldy #MODCTRL_MODULE_ID+1 + ldy #MOD_CTRL::MODULE_ID+1 sta (Ctrl),y inc TPtr+1 ; Remember that we got the OS @@ -440,19 +438,19 @@ HeaderError: ; caller CalcSizes: - lda Header + O65_HDR_TLEN - add Header + O65_HDR_DLEN + lda Header + O65_HDR::TLEN + add Header + O65_HDR::DLEN sta TPtr - lda Header + O65_HDR_TLEN + 1 - adc Header + O65_HDR_DLEN + 1 + lda Header + O65_HDR::TLEN + 1 + adc Header + O65_HDR::DLEN + 1 sta TPtr+1 lda TPtr - add Header + O65_HDR_BLEN + add Header + O65_HDR::BLEN pha ; Save low byte of total size - ldy #MODCTRL_MODULE_SIZE + ldy #MOD_CTRL::MODULE_SIZE sta (Ctrl),y lda TPtr+1 - adc Header + O65_HDR_BLEN + 1 + adc Header + O65_HDR::BLEN + 1 iny sta (Ctrl),y tax @@ -466,7 +464,7 @@ CalcSizes: sta Module stx Module+1 - ldy #MODCTRL_MODULE + ldy #MOD_CTRL::MODULE sta (Ctrl),y txa iny @@ -490,8 +488,8 @@ GotMem: lda Module tax pla jsr pushax - lda Header + O65_HDR_BLEN - ldx Header + O65_HDR_BLEN+1 + lda Header + O65_HDR::BLEN + ldx Header + O65_HDR::BLEN+1 jsr _bzero ; bzero (bss, bss_size); ; Load code and data segment into memory. The sum of the sizes of @@ -526,10 +524,10 @@ Reloc: lda Module ; Relocate the data segment lda Module - add Header + O65_HDR_TLEN + add Header + O65_HDR::TLEN pha lda Module + 1 - adc Header + O65_HDR_TLEN + 1 + adc Header + O65_HDR::TLEN + 1 tax pla ; Data segment address in a/x jsr RelocSeg