From duuqnd at stacken.kth.se Thu Jul 3 17:06:28 2025 From: duuqnd at stacken.kth.se (John Lorentzson) Date: Thu, 3 Jul 2025 17:06:28 +0200 Subject: [Antique-Hackers] =?utf-8?b?RsO2cnN0YSB0aXR0IHDDpSB+OTAlIGtvbXBs?= =?utf-8?q?ett_kompilering?= Message-ID: 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-