| OldComp.cz https://oldcomp.cz/ |
|
| Vianocny darcek pre ZX Spektrum https://oldcomp.cz/viewtopic.php?f=40&t=3492 |
Stránka 1 z 3 |
| Autor: | Busy [ 25.12.2015, 02:25 ] |
| Předmět příspěvku: | Vianocny darcek pre ZX Spektrum |
Kód: org #8000
runme ld a,#08 out (#fe),a ld hl,#5aff ld de,#5afe ld bc,#0300 ld (hl),#07 lddr ld (hl),c ld b,#18 lddr vesele xor a in a,(#fe) or #e0 inc a jr nz,vesele ld hl,#4030 ld de,pf1994 ld bc,#0810 vanoce ld a,(de) ld (hl),a inc de call rok djnz vanoce ld b,#04 vam call novy djnz vam ld de,#0808 praje ld b,e push hl push bc busy call novy rlc c jr nc,#01 dec l djnz busy pop bc pop hl push hl push bc soft call novy rrc c jr nc,#01 inc l djnz soft pop bc pop hl ld a,d dec a cp #01 sbc a,a and #10 add a,e ld b,a hard call novy djnz hard ld a,#02 add a,e ld e,a dec d jr nz,praje ld (hl),#fe xor a stastn in a,(#fe) or #e0 inc a jr z,stastn ret novy ld a,c or (hl) ld (hl),a rok inc h ld a,h and #07 ret nz ld a,#20 add a,l ld l,a ret c ld a,#f8 add a,h ld h,a ret pf1994 db #28,#10,#ba,#7c db #7c,#ba,#38,#54 |
|
| Autor: | Aki [ 26.12.2015, 11:59 ] |
| Předmět příspěvku: | Re: Vianocny darcek pre ZX Spektrum |
Nejak se mi nedari to prelozit sjasmplusem: Kód: 001 0000 ;;;;;;;;;;;;;;;;;;;;;
002 0000 ;; Vianocny darcek ;; 003 0000 ;;;;;;;;;;;;;;;;;;;;; 004 0000 005 0000 DEVICE ZXSPECTRUM128 006 0000 OUTPUT nic.nic 007 0000 008 0000 OUTPUT pf.bin 009 0000 010 0000 start 011 0000 org #8000 ;32768 012 8000 013 8000 3E 08 runme ld a,#08 014 8002 D3 FE out (#fe),a 015 8004 21 FF 5A ld hl,#5aff 016 8007 11 FE 5A ld de,#5afe 017 800A 01 00 03 ld bc,#0300 018 800D 36 07 ld (hl),#07 019 800F ED B8 lddr 020 8011 71 ld (hl),c 021 8012 06 18 ld b,#18 022 8014 ED B8 lddr 023 8016 AF vesele xor a 024 8017 DB FE in a,(#fe) 025 8019 F6 E0 or #e0 026 801B 3C inc a 027 801C 20 F8 jr nz,vesele 028 801E 21 30 40 ld hl,#4030 029 8021 11 88 80 ld de,pf1994 030 8024 01 10 08 ld bc,#0810 031 8027 1A vanoce ld a,(de) 032 8028 77 ld (hl),a 033 8029 13 inc de 034 802A CD 79 80 call rok 035 802D 10 F8 djnz vanoce 036 802F 06 04 ld b,#04 037 8031 CD 76 80 vam call novy 038 8034 10 FB djnz vam 039 8036 11 08 08 ld de,#0808 040 8039 43 praje ld b,e 041 803A E5 push hl 042 803B C5 push bc 043 803C CD 76 80 busy call novy 044 803F CB 01 rlc c zdrojak.a80(45): error: [JR] Target out of range (-32834) 045 8041 30 00 jr nc,#01 046 8043 2D dec l 047 8044 10 F6 djnz busy 048 8046 C1 pop bc 049 8047 E1 pop hl 050 8048 E5 push hl 051 8049 C5 push bc 052 804A CD 76 80 soft call novy 053 804D CB 09 rrc c zdrojak.a80(54): error: [JR] Target out of range (-32848) 054 804F 30 00 jr nc,#01 055 8051 2C inc l 056 8052 10 F6 djnz soft 057 8054 C1 pop bc 058 8055 E1 pop hl 059 8056 7A ld a,d 060 8057 3D dec a 061 8058 FE 01 cp #01 062 805A 9F sbc a,a 063 805B E6 10 and #10 064 805D 83 add a,e 065 805E 47 ld b,a 066 805F CD 76 80 hard call novy 067 8062 10 FB djnz hard 068 8064 3E 02 ld a,#02 069 8066 83 add a,e 070 8067 5F ld e,a 071 8068 15 dec d 072 8069 20 CE jr nz,praje 073 806B 36 FE ld (hl),#fe 074 806D AF xor a 075 806E DB FE stastn in a,(#fe) 076 8070 F6 E0 or #e0 077 8072 3C inc a 078 8073 28 F9 jr z,stastn 079 8075 C9 ret 080 8076 79 novy ld a,c 081 8077 B6 or (hl) 082 8078 77 ld (hl),a 083 8079 24 rok inc h 084 807A 7C ld a,h 085 807B E6 07 and #07 086 807D C0 ret nz 087 807E 3E 20 ld a,#20 088 8080 85 add a,l 089 8081 6F ld l,a 090 8082 D8 ret c 091 8083 3E F8 ld a,#f8 092 8085 84 add a,h 093 8086 67 ld h,a 094 8087 C9 ret 095 8088 28 10 BA 7C pf1994 db #28,#10,#ba,#7c 096 808C 7C BA 38 54 db #7c,#ba,#38,#54 097 8090 098 8090 OUTPUT nic.nic 099 8090 SAVESNA "pf.sna",start 100 8090 101 8090 Value Label ------ - ----------------------------------------------------------- 0x0000 start 0x8000 X runme 0x8016 vesele 0x8088 pf1994 0x8027 vanoce 0x8079 rok 0x8031 vam 0x8076 novy 0x8039 praje 0x803C busy 0x804A soft 0x805F hard 0x806E stastn |
|
| Autor: | Trol [ 26.12.2015, 13:04 ] |
| Předmět příspěvku: | Re: Vianocny darcek pre ZX Spektrum |
Nejsem si jistý, ale já bych přepsal oba jr nc,#01 na jr nc,$+1. |
|
| Autor: | nobomi [ 26.12.2015, 13:06 ] |
| Předmět příspěvku: | Re: Vianocny darcek pre ZX Spektrum |
jr nc,#01 přepsat na jr nc,$+3 a SAVESNA "pf.sna",start na SAVESNA "pf.sna",runme |
|
| Autor: | zxcygnus [ 26.12.2015, 13:20 ] |
| Předmět příspěvku: | Re: Vianocny darcek pre ZX Spektrum |
Vida, tím jr nc,$+3 to bylo ... já v tom hledal sofistikovaný trik s rst #38 a zrovna jsem přemýšlel, co to vlastně má dělat. |
|
| Autor: | Aki [ 26.12.2015, 15:17 ] |
| Předmět příspěvku: | Re: Vianocny darcek pre ZX Spektrum |
To ma namalovat jen ten stromek a nic jineho? Pak nechapu nazvy navesti... |
|
| Autor: | Lisiak4 [ 26.12.2015, 15:25 ] |
| Předmět příspěvku: | Re: Vianocny darcek pre ZX Spektrum |
No asi jen takový vzkaz. Ale pak nechápu navěstí "hard" |
|
| Autor: | Lisiak4 [ 26.12.2015, 16:23 ] |
| Předmět příspěvku: | Re: Vianocny darcek pre ZX Spektrum |
A jestli s tou chybou taky nelegráckuje. "jr" by dle všeho nějaká pseudo instrukce, se kterou bude mít nějaký překladač problém neměla být. Tedy je to dle všeho klasická instrukce... . |
|
| Autor: | Busy [ 26.12.2015, 18:04 ] |
| Předmět příspěvku: | Re: Vianocny darcek pre ZX Spektrum |
Instrukcia jr nie je ziadna pseudoinstrukcia, ale normalny regulerny relativny skok Pre preklad v SjASM treba v kazdom jr <podmienka>,<cislo> a djnz <cislo> treba pred cislo pripisat $+2+. Takze napriklad namiesto jr nc,#01 treba napisat jr nc,$+2+#01 alebo rovno jr nc,$+3 Totiz, MRS funguje tak, ze ak je za instrukciou skoku nejaky label, tak je jasne ze to ma skakat na ten label, a samotna hodnotu operandu ktory sa zapise do pameti sa podla toho vypocita. Ale ak je ako argument napisane obycajne cislo, tak sa priamo pouzije ako operand. A v dobe ked som to pisal, potreboval som preskocit iba jednu jednobajtovu instrukciu a preto mi prislo jednoduchsie napisat #01 nez zavadzat kvoli tomu cely jeden novy label, alebo pisat zlozitejsie $+#03 (z ktoreho vobec na prvy pohlad nevidno ze je to prave jeden preskoceny bajt). Navestie hard je sucastou mojho oficialneho mena (Busy soft & hard), kedze okrem softu sa hrabem aj v hardweri A ako "nobomi" spravne napisal, do prikazu SAVESNA za meno suboru treba dat hodnotu, kam to ma pri spusteni snapu skocit. Na konci toho listingu su hodnoty navesti, a "start" ma hodnotu 0, takze ak sa pouzije v SAVESNA "start", tak to skoci na nulu. Preto treba pouzit "runme" ktore ma hodnotu #8000 co je uz spravna hodnota odkial sa program v snape ma spustit. Problem je v tom, ze defaultna adresa, kam sa preklada kod, je #0000, a preto ak sa hned na zaciatku zdrojaku hodi navestie, bude mat nulovu hodnotu tiez. Az navestie definovane za ORG-om ma spravnu hodnotu. |
|
| Autor: | Lisiak4 [ 26.12.2015, 18:28 ] |
| Předmět příspěvku: | Re: Vianocny darcek pre ZX Spektrum |
OK, len ako niekoho, kto si trochu číta o asm ma nenapadlo, že bude mat prekladač problém aj s klasickou inštrukciou. Potom by ma zaujímalo, ako bude vizerať strojový kód v rámci tvojeho kódu a kódu upraveného. Pokiaľ rovnako, mohla by sa tu položiť otázka, čo je správnejšie zapísané... . V rámci asm na Amige sa mi napríklad tiež nepáči, keď sa použije MOVE pre adresový register a nie MOVEA, kde sa pri MOVE v rámci adresového registru použije vlastne MOVEA automaticky. Ale to je len moj začiatočnícky pohľad na vec |
|
| Autor: | Billy48 [ 12.02.2016, 04:43 ] | ||
| Předmět příspěvku: | Re: Vianocny darcek pre ZX Spektrum | ||
Ja som to skusal na svojom didaktiku asi pred pol rokom, ked som prechadzal Busyho web na speccy.cz Na Didaktiku pouzivam PROMETHEUS a tiez v nom bol problem s jr nc,#01 tak som ju prepisal na jr nc, skok1 a dalsiu na jr nc,skok2 a samozrejme som doplnil navestia. Prikladam upraveny zdrojovy kod a v prilohe je vysledok. Kód: org #8000
runme ld a,#08 out (#fe),a ld hl,#5aff ld de,#5afe ld bc,#0300 ld (hl),#07 lddr ld (hl),c ld b,#18 lddr vesele xor a in a,(#fe) or #e0 inc a jr nz,vesele ld hl,#4030 ld de,pf1994 ld bc,#0810 vanoce ld a,(de) ld (hl),a inc de call rok djnz vanoce ld b,#04 vam call novy djnz vam ld de,#0808 praje ld b,e push hl push bc busy call novy rlc c jr nc,skok1 skok1 dec l djnz busy pop bc pop hl push hl push bc soft call novy rrc c jr nc,skok2 skok2 inc l djnz soft pop bc pop hl ld a,d dec a cp #01 sbc a,a and #10 add a,e ld b,a hard call novy djnz hard ld a,#02 add a,e ld e,a dec d jr nz,praje ld (hl),#fe xor a stastn in a,(#fe) or #e0 inc a jr z,stastn ret novy ld a,c or (hl) ld (hl),a rok inc h ld a,h and #07 ret nz ld a,#20 add a,l ld l,a ret c ld a,#f8 add a,h ld h,a ret pf1994 db #28,#10,#ba,#7c db #7c,#ba,#38,#54
|
|||
| Autor: | Lanex [ 12.02.2016, 10:49 ] |
| Předmět příspěvku: | Re: Vianocny darcek pre ZX Spektrum |
To asi nebude správně. Já to v LnxSpectru v ASM editoru po opravě jr nc,#01 spustil, a...
|
|
| Autor: | Busy [ 12.02.2016, 19:39 ] |
| Předmět příspěvku: | Re: Vianocny darcek pre ZX Spektrum |
Billy48 píše: ... som ju prepisal na jr nc, skok1 a dalsiu na jr nc,skok2 a samozrejme som doplnil navestia. Zle si umiestnil navestia. Vsimni si moj predchadzajuci prispevok kde pisem ze JR #01 ma za ulohu preskocit jednu nasledujucu jednobajtovu instrukciu. Spravne to ma byt takto:Kód: ...
jr nc,skok1 dec l skok1 djnz busy pop bc pop hl push hl push bc soft call novy rrc c jr nc,skok2 inc l skok2 djnz soft ... |
|
| Autor: | Billy48 [ 12.02.2016, 19:47 ] |
| Předmět příspěvku: | Re: Vianocny darcek pre ZX Spektrum |
Busy píše: Billy48 píše: ... som ju prepisal na jr nc, skok1 a dalsiu na jr nc,skok2 a samozrejme som doplnil navestia. Zle si umiestnil navestia. Vsimni si moj predchadzajuci prispevok kde pisem ze JR #01 ma za ulohu preskocit jednu nasledujucu jednobajtovu instrukciu. Spravne to ma byt takto:Kód: ... jr nc,skok1 dec l skok1 djnz busy pop bc pop hl push hl push bc soft call novy rrc c jr nc,skok2 inc l skok2 djnz soft ... Dnes okolo obeda som upravil navestia presne ako pises a uz to bol ten stromcek ako ma Lanex. Pretoze ked som videl obrazok od Lanexa, tak mi bolo jasne, ze to mam zle. Vtedy som si ani neuvedomil, ze to ani nema vyznam skocit hned na dalsiu instrukciu. Chyba zaciatocnika |
|
| Autor: | Billy48 [ 14.02.2016, 20:39 ] |
| Předmět příspěvku: | Re: Vianocny darcek pre ZX Spektrum |
Este doplnim, ze ked som pouzil PROMETHEUS, tak v nom treba vlozit jr nc,$+2 co mna prekvapilo. Cakal som but $+1 (ak by bol $ na nasledujucej adrese, cize dalsej instrukcie v tomto pripade inc l), alebo $+3 (ak by bol $ na prvej adrese instrukcie jr), ale prometheus pocita adresu $ od druheho bajtu instrukcie jr. Ked zoberiem ze jr nc,$+2 je v srojaku #30(jr nc,) a #01(hodnota 1), tak mohol prometheus zobrat aj priamo hodnotu a nielen vyraz prip. navestie. V prilohe je priklad kam bude program po kompilacii prometheom skakat: Kód: ...
jr nc,$+2 dec l djnz busy pop bc pop hl push hl push bc soft call novy rrc c jr nc,$+2 ;tato instrukcia je na adresach: #804F a #8050, takze $=#8050+2 inc l ;ak by bolo jr nc,$+1 tak skoci sem djnz soft ;jr nc,$+2 - skoci sem ... |
|
| Stránka 1 z 3 | Všechny časy jsou v UTC + 1 hodina [ Letní čas ] |
| Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |
|