En udda assembler.

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43149
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

En udda assembler.

Inlägg av sodjan »

Bara en lite kul "grej"... Har någon sätt assembler kod för en arkitekur
(VAX, CISC) som kompileras och skapar assembler kod för en helt annan
arkitektur (här Alpha, RISC)?

Källkoden för VAX (VAX Macro-32 assembler), bara 6 instruktioner
förutom assembler direktiv:

Kod: Markera allt

$ type MENABIT.MAR

        .TITLE  MENABIT
        .SBTTL  BIT_TEST
;+
;       Check if bit is set
;-
        .psect  mna$bit_service,exe,nowrt,pic,shr
        .entry  mna$bit_tst,0
        bitl    @4(ap),@8(ap)           ; test bit
        beql    10$
        movl    #-1,r0                  ; set true
        ret
10$:    clrl    r0                      ; set false
        ret
        .end
$
Kompileras med Macro kompilatorn på Alpha (ger en object fil och en list fil):

Kod: Markera allt

$ d menabit.mar

Directory xxx:[JES]

MENABIT.MAR;2                              1/49          28-AUG-2018 18:34:03.45

Total of 1 file, 1/49 blocks.
$
$ macro /list /machine menabit.mar
$
$ d menabit.*

Directory xxx:[JES]

MENABIT.LIS;1                             11/49          28-AUG-2018 18:39:26.73
MENABIT.MAR;2                              1/49          28-AUG-2018 18:34:03.45
MENABIT.OBJ;1                              1/49          28-AUG-2018 18:39:26.73

Total of 3 files, 13/147 blocks.
$
Detta skapar assembler/maskin kod för Alpha processorn.
Eftersom det är en RISC så blir det betydligt mer kod:

Kod: Markera allt

MENABIT                         Source Listing                  28-AUG-2018 18:43:05  AMAC V5.0-120-5                   Page 1
                                                                28-AUG-2018 18:34:03  xxx:[JES]MENABIT.MAR;2

                      00000000        1         .TITLE  MENABIT
                      00000000        2         .SBTTL  BIT_TEST
                      00000000        3 ;+
                      00000000        4 ;       Check if bit is set
                      00000000        5 ;-
                      00000000        6         .psect  mna$bit_service,exe,nowrt,pic,shr
                      00000000        7         .entry  mna$bit_tst,0
                      00000002        8         bitl    @4(ap),@8(ap)           ; test bit
                      00000007        9         beql    10$
                      00000009       10         movl    #-1,r0                  ; set true
                      00000010       11         ret
                      00000011       12 10$:    clrl    r0                      ; set false
                      00000013       13         ret
                      00000014       14         .end



MENABIT                         Machine Code Listing            28-AUG-2018 18:43:05  AMAC V5.0-120-5                   Page 2
                                BIT_TEST                        28-AUG-2018 18:34:03  xxx:[JES]MENABIT.MAR;2

                                .PSECT  MNA$BIT_SERVICE, OCTA, PIC, CON, REL, LCL, SHR, EXE, RD, NOWRT
             0000       MNA$BIT_TST::
23DEFFE0     0000               LDA     SP, -32(SP)
B77E0000     0004               STQ     R27, (SP)
B75E0010     0008               STQ     R26, 16(SP)
B7BE0018     000C               STQ     FP, 24(SP)
47FE041D     0010               MOV     SP, FP
             0014       $L1:
201FFFFF     0014               MOV     -1, R0                                                                              ; 000010
A3900000     0018               LDL     R28, (R16)                                                                          ; 000008
A3510000     001C               LDL     R26, (R17)
475C0012     0020               AND     R26, R28, R18
43F20012     0024               SEXTL   R18, R18
E6400009     0028               BEQ     R18, 3_10$                                                                          ; 000009
             002C       $L2:                                                                                                ; 000011
47FD041E     002C               MOV     FP, SP
A79D0010     0030               LDQ     R28, 16(FP)
A7BD0018     0034               LDQ     FP, 24(FP)
23DE0020     0038               LDA     SP, 32(SP)
2FFE0000     003C               UNOP
6BFC8001     0040               RET     R28
2FFE0000     0044               UNOP
2FFE0000     0048               UNOP
2FFE0000     004C               UNOP
             0050       3_10$:                                                                                              ; 000012
47FD041E     0050               MOV     FP, SP                                                                              ; 000011
A79D0010     0054               LDQ     R28, 16(FP)
A7BD0018     0058               LDQ     FP, 24(FP)
47FF0400     005C               CLR     R0                                                                                  ; 000012
23DE0020     0060               LDA     SP, 32(SP)                                                                          ; 000011
6BFC8001     0064               RET     R28

Routine Size: 104 bytes,    Routine Base: MNA$BIT_SERVICE + 0000
Siffrorna i kanten 000010 o.s.v. är radnummer i "Source Listing" ovanför...

Denna teknik används för att porta VAX assembler både till Alpha och Intel Itanium.
Och just nu även vid portningen av OpenVMS till "standard" Intel x86-64.
VAX Macro assembler kompileras direkt till Intel X86-64 kod...
Det är en del utmaningar med att t.ex. översätta de fysiska registren mellan
de olika arkitekturerna...
Användarvisningsbild
lillahuset
Gått bort
Inlägg: 13969
Blev medlem: 3 juli 2008, 08:13:14
Ort: Norrköping

Re: En udda assembler.

Inlägg av lillahuset »

Inget kommersiellt, men en kompis skrev en konverterare som konverterade 6502-assembler i form av assemblerad hexkod till 6809-assembler. Ett något mindre ambitiöst projekt men inte helt utan utmaningar.
kodar-holger
EF Sponsor
Inlägg: 916
Blev medlem: 26 maj 2014, 12:54:35
Ort: Karlskoga

Re: En udda assembler.

Inlägg av kodar-holger »

På gymnasiet hade vi ett program som översatte 8080 mnemonics till z80 men det är ju en mindre utmaning eftersom där finns en 1 till 1 översättning, men det är det enda jag sett i den vägen.

Har för mig att det fanns en just-in-time kompilator för alpha också så man kunde köra en del vax-program direkt. Måste pratats om på det där decus-mötet i Umeå nån gång i det glada 90-talets början, 92 kanske, när alla pratade alpha men ingen sett någon i verkligheten.

Suck. Det var kanske inte bättre förr men det blir sämre sen. VMS på x64...
Användarvisningsbild
lillahuset
Gått bort
Inlägg: 13969
Blev medlem: 3 juli 2008, 08:13:14
Ort: Norrköping

Re: En udda assembler.

Inlägg av lillahuset »

Suck. Det var kanske inte bättre förr men det blir sämre sen. VMS på x64...
Ja förfallet går bara snabbare och snabbare.
Eller man kanske ska se det som att det blir ytterligare ett skäl att inte välja ett OS från nordvästra USA.
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43149
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: En udda assembler.

Inlägg av sodjan »

Ja, både 6502->6809 och 8080->z80 är ju relativt likartade arkitekturer.
I fallen jag visade så är det snarare så att det är mer likt traditionella
kompilatorer, men som tar assembler kod för en annan arkitektur som
sin in-fil, så att säga. På VAX var det en vanlig assembler. Instruktionerna
i in-filen jag visade är vanliga VAX maskininstruktioner.

> Har för mig att det fanns en just-in-time kompilator för alpha...

Känner jag inte till, du tänker inte på JIT kompilatorn för x86 som
körde x86 program direkt på Alpha? Sen finns det en konverterare
som läser en EXE för VAX och skapar en för Alpha:

Kod: Markera allt

$ help vest

VEST

     The VEST utility translates OpenVMS VAX executable and shareable
     images into functionally equivalent OpenVMS AXP images. VEST also
     allows you to analyze OpenVMS VAX images to assess both their
     translatability and their performance as translated images on an
     OpenVMS AXP system.
Liknande vertyg finns för att konvertera Alpha EXEs till Itanium.
Bakgrunden till detta (båda fallen) är så klart de som har mist
källkoderna till sina applikationer.

DECUS i Umeå, där var jag! Jag hade en session kring client/server
programmering med Visual Basic och Rdb. Vi var tre från Ericsson i
Norrköping som tog nattåget. Bra drag tills konduktören bad oss att
gå och lägga oss vid ett tiden. Vaknade av att det var helt tyst vid sju
tiden, vi stod still mitt ute i skogen söder om Vännäs då vi skulle ha
varit i Umeå, ett godståg hade en bruten axel. Vi kom fram till
Umeå vid lunch...

> 92 kanske...

93 :-)

Jag har DECUS Bulletinen nr 1/93 kvar där jag även hade en artikel
på samma tema, "client/server med Visul Basic och Rdb". Jag kan scanna
den om det finns intresse. Kan vara kul att se vad som var "state-of-the-art"
kring 91-92. :-)
kodar-holger
EF Sponsor
Inlägg: 916
Blev medlem: 26 maj 2014, 12:54:35
Ort: Karlskoga

Re: En udda assembler.

Inlägg av kodar-holger »

VEST hette det ja. Och jag mindes fel på många håll uppenbarligen och ändå är det bara ett halvt liv sen.

Jag har säkert också den decus-bullen. Har lovat skicka dom till Anderz_bzn men dom ligger fortfarande något år eller två senare på min soffa. :(

Har den här kvar från mötet!
IMGP9447_1.jpg
Delades ut som en lott med någon vinst jag inte heller kommer ihåg. Jag vann inte.

Nostalgin är inte som förr.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43149
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: En udda assembler.

Inlägg av sodjan »

> Jag har säkert också den decus-bullen.

På sidan 6 har du min artikel. Och det pusslet (det
var lite tricksigt att öppna burken) ligger någonstans...
MiaM
Inlägg: 9912
Blev medlem: 6 maj 2009, 22:19:19

Re: En udda assembler.

Inlägg av MiaM »

lillahuset skrev:
Suck. Det var kanske inte bättre förr men det blir sämre sen. VMS på x64...
Ja förfallet går bara snabbare och snabbare.
Eller man kanske ska se det som att det blir ytterligare ett skäl att inte välja ett OS från nordvästra USA.
Det verkar ju alldeles utmärkt att kunna köra VMS på "vanliga" datorer. Hoppas detta kommer gå att köra med hobbyist/decus-licenser och inte bara för storföretag.

Det fanns ju en vilja hos folk på DEC att fixa nån slags mer "persondatormässig" VMS-grej. Ledningen på DEC sa nej, varpå folk flyttade till Microsoft och vi fick Windows NT. Väldigt mycket i NT som inte är ärvt från gamla 16-bitarswindows är ju rätt likt VMS, som en slags nyare version av VMS.
sodjan skrev:Ja, både 6502->6809 och 8080->z80 är ju relativt likartade arkitekturer.
Z80 är ju bakåtkompatibel med 8080/8085 på binärnivå, så det är ju en ren syntaxändring. Däremot var väl tanken att assemblerkällkod för 8080/8085 skulle gå rätt lätt att assemblera även för 8088/8086. Vet inte riktigt hur bra detta egentligen blev. MS-DOS innehåller en del trolleri för att källkod skriven för CP/M på 8080/8085 ska gå att använda utan att behöva peta på datastrukturerna. Detta ställde tydligen till en del problem genom åren, typ tror detta t.ex. är orsaken till A20 gate på 286 och uppåt :) Mer finns att läsa i diverse bloggpostningar på bloggen os2museum.

6502 har ju sina rätt speciella addresseringsmodes så det är kanske en lite större utmaning att porta till 6809. Sidospår på detta: Något som inte pratats så högt om är att Hitachis 6309-processor inte bara kör 6809-kod rakt av, utan den har också en klase utökningar. Antagligen nåt i licensavtalet på 68xx-kretsarna att Hitachi inte fick markandsföra det så värst? Jämför NEC V20 som är bättre än 8088 men NEC fick inte marknadsföra det.
sodjan skrev:DECUS i Umeå, där var jag! Jag hade en session kring client/server
programmering med Visual Basic och Rdb. Vi var tre från Ericsson i
Norrköping som tog nattåget. Bra drag tills konduktören bad oss att
gå och lägga oss vid ett tiden. Vaknade av att det var helt tyst vid sju
tiden, vi stod still mitt ute i skogen söder om Vännäs då vi skulle ha
varit i Umeå, ett godståg hade en bruten axel. Vi kom fram till
Umeå vid lunch...

> 92 kanske...

93 :-)
Lustigt nog så är 92 och 93 också tågnummer som används, och i väldigt många år använts, på nattågen till/från Norrland :)
Användarvisningsbild
anders_bzn
Inlägg: 5444
Blev medlem: 17 december 2008, 19:22:18
Ort: Kävlinge
Kontakt:

Re: En udda assembler.

Inlägg av anders_bzn »

kodar-holger skrev:VEST hette det ja. Och jag mindes fel på många håll uppenbarligen och ändå är det bara ett halvt liv sen.

Jag har säkert också den decus-bullen. Har lovat skicka dom till Anderz_bzn men dom ligger fortfarande något år eller två senare på min soffa. :(
Det har jag glömt, men nu påminde du mig. Jag är fortfarande intresserad!!!
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43149
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: En udda assembler.

Inlägg av sodjan »

> På sidan 6 har du min artikel.

Och här finns den nu scannad. För den nyfikne... :-)
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
bit96
Inlägg: 2492
Blev medlem: 3 september 2007, 10:04:29
Ort: Säffle

Re: En udda assembler.

Inlägg av bit96 »

Bra skriven artikel sodjan. :tumupp: Kul att läsa.
MiaM
Inlägg: 9912
Blev medlem: 6 maj 2009, 22:19:19

Re: En udda assembler.

Inlägg av MiaM »

Kul läsning!

Jag visste inte att Ericsson haft ett världsomspännande DECnet-nät! Eller så visste jag det och har glömt det :wink:

Vad blev det av detta senare i tid?
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43149
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: En udda assembler.

Inlägg av sodjan »

Ja, det var ju fabriker så som i Australien, Spanien, Mexiko och var det nu var.
Det som hände var ju att Ericsson sålda av i princip alla fabriker (utom någon
som t.ex i Katrineholm som höll på mer med testproduktion), så det hela
avvecklades av sig självt så att säga. Jag hade en hel del jobb 2000 - 2005
ca då jag jobbade med VMS systemet på fabrikerna i Visby, Karlskrona och
lite i Katrineholm som ju Flextronics hade övertagit från Ericsson. Det var
huvudorsaken till att jag sade upp mig från Ericsson och slutade febr 2000,
Flextronics ville ha mina tjänster och jag såg ingen anledning till att den
Ericssonenhet där jag var anställd skulle håva in marginalen...

Sen gick all Flextronics produktion utomlands och fabrikerna stängdes...
Skriv svar