[abc80] Assembler -> BAC program?

Robert Juhasz juhasz at abc.se
Fre May 30 09:13:26 PDT 2014


kul att abccas används! var mycket roligt hackande o jämförande av genererade och inspelade wav-filer sample för sample för att få till det...

finns ett program i abcarkivet som heter embmake.bas (ligger i abc80/asm) som gör bac filer av binärdata i minnet. har haft som (avstannat) projekt att göra samma sak i python. se nedan o hacka gärna vidare (har bara översatt koden o inte testat nämnvärt...). de här  magiska variablerna r1-r3 är basic opkoder som kapslar in binärdatat men jag har i te kollat i detalj vad den gör...

är man riktigt igång skulle jag gärna se en (snyggare skriven) pythonvariant av abccas...

Robert



# from embmake.bas
# but only one block....



def embcode(block,start,execaddr,fname):
    f = open(fname,mode='wb')
    r1 = [130,43,10,0,134,128,199,128,0,204,194,146,92,0,0,191,58,131,193,145,
        92,0,0,199,41,254,206,54,199,42,254,206,54,199,0,1,250,245,199,6,0,
        245,183,13]
    r2 = [134,129,193,145,92,0,0,213,186,44,199]
    r3 = [0,186,44,199]
    r4 = [0,186,58,131,194,146,92,0,0,203,34]
    p = 0
    outdata = r1
    rad = 10
    ltot = len(block)
    i=0
    while ltot>0:
        if len(outdata)+40 > 253:
            # write outdata outdatastr
            print(outdata)
            f.write(bytes(outdata))
            p = p+1
            outdata=[]
        len1 = 128
        if len1 > ltot:
            len1 = ltot
        if len(outdata)+len1+40 > 253:
            len1 = 253-len(outdata)-40
        rad=rad+10
        outdata = outdata+[34+len1,rad & 255,rad >> 8]+r2+[i]+r3+[i>>8]+r4+[len1]
        outdata = outdata + block[i:(i+len1-1)]
        outdata = outdata + [184,13]
        i=i+len1
        ltot=len(block)-i+1
    outdata=outdata+[1]
    f.write(bytes(outdata))
    print(outdata)
    f.close()

                
            
            
        
       



Skickat från min Samsung Mobil

<div>-------- Originalmeddelande --------</div><div>Från: Andreas Gustafsson <andreas.gustafsson at gmail.com> </div><div>Datum:2014-05-29  23:40  (GMT+01:00) </div><div>Till: abc80 at abc80.org </div><div>Rubrik: [abc80] Assembler -> BAC program? </div><div>
</div>Hej!

Har precis införskaffat min första ABC80 med kassettstation. Jag trodde
först att det skulle vara en hel vetenskap att lyckas för över program från
PC till ABCn med någon sorts custom-byggd hårdvara som jag inte skulle vara
kapabel att skapa.
Men med hjälp av en laptop, en sån där kassett-adapter egentligen avsedd
för gamla bilstereos och ABCCAS av Robert Juhasz så visade det sig ganska
enkelt att ladda hem ett kompilerat BASIC-program (.BAC) från nätet och
faktiskt köra det på min ABC80.

Nu är jag väldigt sugen på att koda något själv. Jag är mest intresserad av
att koda grafikdemos i ren assembler, har kodat en del saker för ZX81 som
har rätt så liknande tekniska förutsättningar som ABC80 (
http://ag1976.com/prods.html?prodplatform=12) så jag tror att det skulle gå
att göra saker för vår gamla härliga svenska arbetshäst också.

Problemet är att jag inte har något bra sätt att få över det jag
cross-assemblerat på PC till ABC80n.
För tillfället får jag sitta och skriva in allt för hand som datasatser via
en loader i BASIC vilket bara funkar för riktigt små saker.
Finns det något sätt att "injecta" min råa z80-binär och få ut en .BAC-fil
som jag sedan kan använda ABCCAS på?

Idealt tänker jag mig att man har nån liten binär-stub som innehåller
BASIC-koden för typ:

10 A%=CALL(49408)

och sedan så är resten min rådata.

Är det ens möjligt att göra så, eller kräver .BAC-formatet att det följer
ett förutbestämt format?

Vet inte om jag lyckats förklara tillräckligt väl vad jag vill åstadkomma,
men hoppas på svar! :)

/Andreas
_______________________________________________
ABC80 mailing list
ABC80 at abc80.org
http://www.abc80.org/mailman/listinfo/abc80


More information about the ABC80 mailing list