Thread View: pl.comp.lang.asm
3 messages
3 total messages
Started by Pszemol
Tue, 10 Jul 2012 14:36
8051 - Archimedes Assembler
Author: Pszemol
Date: Tue, 10 Jul 2012 14:36
Date: Tue, 10 Jul 2012 14:36
101 lines
4664 bytes
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
Author: Pszemol
Date: Tue, 10 Jul 2012 22:13
Date: Tue, 10 Jul 2012 22:13
38 lines
2252 bytes
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
Author: Remek
Date: Tue, 17 Jul 2012 02:30
Date: Tue, 17 Jul 2012 02:30
7 lines
1007 bytes
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