[Antique-Hackers] Första titt på ~90% komplett kompilering
John Lorentzson
duuqnd at stacken.kth.se
Thu Jul 3 17:06:28 CEST 2025
Jag har skrivit klart bitarna som behövs för att kompilera ett ganska
begränsat program från källkod till en maskinkod i bytesekvensform. Det
saknas fortfarande en del kompileringsmetoder, specifikt för aritmetik
och jämförelser, men + och == fungerar. Dessutom vet kompilatorn inget
om vilka funktioner som finns i assemblyvärlden, så alla adresser har
temporärt satts till 0xFEC0. Ett exempel följer:
for x do 16 times
if x == 5 then
drawline(0, 0, 10, 10)
if y == 1 then
set_background(4)
else
set_background(0)
end
y = 1
else
set_background(0)
drawline(100, 100, 120, 120)
end
end
...kompilerades till en sekvens med bytes som disassemblas till:
C000 A9 00 LDA #$00
C002 85 08 STA $08
C004 A5 08 LC004 LDA $08
C006 C9 05 CMP #$05
C008 D0 2D BNE LC037
C00A A9 00 LDA #$00
C00C 85 00 STA $00
C00E 85 01 STA $01
C010 A9 0A LDA #$0A
C012 85 02 STA $02
C014 85 03 STA $03
C016 20 C0 FE JSR $FEC0
C019 A5 09 LDA $09
C01B C9 01 CMP #$01
C01D D0 0A BNE LC029
C01F A9 04 LDA #$04
C021 85 00 STA $00
C023 20 C0 FE JSR $FEC0
C026 4C 30 C0 JMP LC030
C029 A9 00 LC029 LDA #$00
C02B 85 00 STA $00
C02D 20 C0 FE JSR $FEC0
C030 A9 01 LC030 LDA #$01
C032 85 09 STA $09
C034 4C 4D C0 JMP LC04D
C037 A9 00 LC037 LDA #$00
C039 85 00 STA $00
C03B 20 C0 FE JSR $FEC0
C03E A9 64 LDA #$64
C040 85 00 STA $00
C042 85 01 STA $01
C044 A9 78 LDA #$78
C046 85 02 STA $02
C048 85 03 STA $03
C04A 20 C0 FE JSR $FEC0
C04D A5 08 LC04D LDA $08
C04F 18 CLC
C050 69 01 ADC #$01
C052 85 08 STA $08
C054 C9 10 CMP #$10
C056 D0 AC BNE LC004
C058 60 RTS
Notera att den STA $08: LDA $08 biten som finns vid adress C002 faktiskt
behövs eftersom LDA-instruktionen hoppas till senare, och då kan värdet
ha ändrats. Om några fel hittas, svara gärna med dem!
-duuq-
More information about the Antique-Hackers
mailing list