🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.asm
3 messages
3 total messages Started by Pszemol Tue, 10 Jul 2012 14:36
8051 - Archimedes Assembler
#2544
Author: Pszemol
Date: Tue, 10 Jul 2012 14:36
101 lines
4664 bytes
Witam - szukam kogoś kto miał kiedyś do czynienia ze starszym softem dla 
8051...
Mam tu do rozgryzienia kod napisany w assemblerze 8051 Archimedes z 1990 
roku.

Nie mogę nigdzie znaleźć dokumentacji do tego asemblera, do składni makro
-instrukcji itp. Składnię ma dosyć dziwną, część można się domyślić, część 
nie.

Ktoś wie może co oznaczają w poniższym przykładzie odnośniki do "\0+1"?
Albo jak rozumieć "\0_TL0_2"? No i kto widział nazwę etykiety conv2\.:    ?

Przykład:

       MACRO   %convert_data   ;
       mov     a,\0+1          ; If tl0 = ff and next read of tl0
       cjne    a,#0ffh,conv1\@ ; = 00 then dec th0.
            ;
       mov     a,\0_TL0_2   ;
       jnz     conv1\.      ;
            ;
       mov     a,\0_TH0_2      ; Jump if th0 2nd reading <> th0.
       cjne    a,\0,conv1\.    ;
            ;
       setb    c      ;
       sjmp    conv2\.         ; Jump to decrement TH0.
            ;
conv1\.:         ;

       mov     a,\0+2          ;zb.  P1 (LC04-LC11) to A
       anl     a,#0f0h         ;zb.  Mask off lower 4 bits; leave LC11-LC8
       cjne    a,#0f0h,conv4\. ;zb. if not equal to 0x0F
       sjmp    conv5\.         ;zb. if equal to 0x0F jump to decrement T0 
counter, (to fast overflow)

conv4\.:
       mov     a,\0_ROC        ;
       jnb     acc.5,conv3\.   ; Jump if ROC not set.
            ;
       mov     a,\0_TL0_2      ;
       cjne    a,\0+1,conv3\.  ; Jump if not equal.
            ;
       mov     a,\0+2       ; Jump if p1  = 0   if p1 = 0 then internal
       jz      conv3\.      ; counter have rolled over. ignore p3.5.
            ;
conv5\.:
       clr     c            ; Decrement Timer 0.
       mov     a,\0+1       ; Sub 1 from low order.
       subb    a,#1         ;
       mov     \0+1,a       ; Resave low count.
            ;
conv2\.:         ; Decrement TH0.
       mov     a,\0+0      ; Sub 0 with borrow from high count.
       subb    a,#0        ;
       mov     \0+0,a      ; Resave high count.
       mov     a,\0_overflow   ; Clear overflow if still borrowed.
       subb    a,#0        ;
       mov     \0_overflow,a   ; Resave overflow.
       sjmp    conv\.      ;
            ;
conv3\.:         ;
conv\<:            ;
       anl     \0+3,#0fh   ; Mask off upper 4 bits of P2 data.
       mov     a,\0+2      ; Get low byte from p1.
       anl     A,#0fh      ; Mask off upper 4 bits.
       swap    a      ; Move lower 4 bits to upper 4 bits.
       orl     \0+3,A      ; Create lsb byte of count.
            ;
       mov     a,\0+2      ; Get high count from P1 data.
       swap    a      ;
       anl     a,#0fh      ;
       mov     \0+2,a      ; Moved to lsb.
       mov     a,\0+1      ; Get low byte from timer 0 msb.
       anl     A,#0fh      ; Mask off upper 4 bits.
       swap    a      ; Move lower 4 bits to upper 4 bits.
       orl     \0+2,A      ; Create next significant bit of data.
            ;
       mov     a,\0+1      ; Get high count from timer 0 data.
       swap    a      ;
       anl     a,#0fh      ;
       mov     \0+1,a      ; Moved to lsb.
       mov     a,\0+0      ; Get low byte from timer 0 high.
       anl     A,#0fh      ; Mask off upper 4 bits.
       swap    a      ; Move lower 4 bits to upper 4 bits.
       orl     \0+1,A      ; Create next significant bit of data.
            ;
       mov     a,\0      ;
       swap    a      ;
       anl     a,#0fh      ;
       mov     \0,a      ;
            ;
       mov     a,\0_overflow   ;
       cjne    a,#TRUE,conv\@   ;
            ;
       mov     \0_overflow,#00   ;
conv\<:            ;
       nop         ;
            ;
       ENDMAC

 
Re: 8051 - Archimedes Assembler
#2545
Author: Pszemol
Date: Tue, 10 Jul 2012 22:13
38 lines
2252 bytes
"Pszemol" <Pszemol@PolBox.com> wrote in message 
news:jtheks$edm$1@inews.gazeta.pl...
> Ktoś wie może co oznaczają w poniższym przykładzie odnośniki do "\0+1"?
> Albo jak rozumieć "\0_TL0_2"? No i kto widział nazwę etykiety conv2\.: 
> ?
>
> Przykład:
>
>       MACRO   %convert_data   ;
>       mov     a,\0+1          ; If tl0 = ff and next read of tl0
>       cjne    a,#0ffh,conv1\@ ; = 00 then dec th0.
>            ;
>       mov     a,\0_TL0_2   ;

Już się wykapowałem. Te "makra" działają tak jak definicje z preprocesora.
Te moje makra są makrami z parametrami i odnośniki do \0 lub \1 to
dosłowne odniesienie się do pierwszego lub drugiego argumentu z jego
wywołania. Makra są rozwijane dosłownie, więc te moje

mov   a,\0_TL0_2  ;

przy wywołaniu

%convert_data  pupa

będzie rozwinięte do

mov a,pupa_THO_2;

:-)))

A etykiedy z końcówką \. to po prostu lokalne etykiety makra,
rozwijane potem w kodzie na unikalne skoki tyle razy ile razy
makro jest wywołane.

OK, jestem w domu. Teraz wystarczy to ręcznie przetłumaczyć
na składnię nowocześniejszego kompilatora Keil który pójdzie
pod Windows i zadziała z debuggerem i emulatorem proca :-) 
Re: 8051 - Archimedes Assembler
#2546
Author: Remek
Date: Tue, 17 Jul 2012 02:30
7 lines
1007 bytes
Użytkownik "Pszemol" napisał:

> Ktoś wie może co oznaczają w poniższym przykładzie odnośniki do "\0+1"?

Komentarze nic Ci nie mówią?

Remek
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads