To trzeba zobaczyć w całości, tak bedzie trudno wytłumaczyc.
No powyżej podałem poprawną wersję podprogramu.
Ale że to wątek poświęcony nauce, na przykładzie Twojego kodu opowiem o kilku ważnych rzeczach:
1) Tabulatory, tabulatory i jeszcze raz tabulatory! Pisanie wszystkiego od lewego brzegu jest nieczytelne. Nie widać co jest etykietą (i gdzie ona jest) a gdzie są rozkazy.
2) Podprogramy. Duży plus za używanie podprogramów, dzięki temu jest to czytelne dla innych (i dla piszącego po 24 godzinach

). Tyle tylko że warto przy każdym CALL dać komentarz co to robi, szczególnie jak nazwa podprogramu jest lakoniczna

Komentarzy nigdy nie za dużo - szczególnie na początku drogi z asm.
3) Odstępy. Bardzo fajnie że poszczególne fragmenty kodu oddzielasz wolną linią - to ułatwia nawigację w kodzie. Także oddzielania poszczególnych części
;======================================== jest bardzo dobrym nawykiem.
4) Bezpośrednie adresowanie w pamięci o ile nie jest to ekran nie jest wskazane. Szczególnie jak trzymasz tam tylko dane. Lepiej zmienne umieszczać na końcu kodu:
bajt_old db 0
bajt_new db 0
kolumna_old db 0
kolumna_new db 0
a w samym kodzie zamiast:
ld a,(50000) ;przepisuje zawartosc
ld (50010),a
ld a,(50001) ;Ksb zapamietanie
ld (50011),a
używasz etykiet:
ld a,(bajt_old) ;przepisuje zawartosc
ld (bajt_new),a
ld a,(kolumna_old) ;Ksb zapamietanie
ld (kolumna_new),a
Jest to o wiele czytelniejsze - no i nie grozi pomyłka jak gdzieś wpiszesz zły adres

Weź znajdź w 1000 linijek kodu miejsce gdzie zamiast (50001) wpisałeś (50011)

5) Porządek. Pisząc w asm trzeba być dokładnym - jej brak szybko się zemści. Tak więc jak definiujesz początkowe dane, niech one nie będą przypadkowe.
Wartości startowe ustawiłeś na:
ld a,1 ;zawartosc bajtu (1 - kropka)
ld (50000),a ;K młodszy bajt
ld a,1 ;starszy bajt (0-31)
ld (50001),a ;K nr kolumny
co powoduje że punkt na starcie ustawia się 15 pixeli od lewego brzegu ekranu. Nie lepiej zacząć od lewego brzegu?
ld a,128 ;zawartosc bajtu (1 - kropka)
ld (bajt_old),a ;K młodszy bajt
ld a,0 ;starszy bajt (0-31)
ld (50001),a ;K nr kolumny
6) Szanujmy rejestry. Z80 nie ma ich za dużo więc nie ma sensu używać ich tam gdzie nie trzeba

ld a,(50000)
ld b,a
ld (hl),b ;zapis na ekran
Użycie rejestru B nie ma tu zupełnie sensu, wydłuża czas działania i dodatkowo zaciera obraz całości:
ld a,(50000)
ld (hl),a ;zapis na ekran
7) Ładowanie danych do rejestru/rejestrów. Trzeba zwracać uwagę że czym innym jest LD a,(50000) a ld bc,(50000). I tak:
ld hl,16384
ld bc,(50010)
add hl,bc
powoduje że do rejestru B trafia zawartość pamięci o adresie 50010 a do C - 50011. A nie to chciałeś uzyskać. Prawidłowy kod wygląda następująco:
ld hl,16384
ld a,(50010)
ld b,0
ld c,a
add hl,bc
Ale
najważniejsze że program działa! Nie ma znaczenia że robi to trochę "na około" (dlatego do tego się nie przyczepiłem) - najważniejsze że sobie coś wymyśliłeś i to Ci się udało! Nie poddawaj się i pisz dalej - już widać że złapałeś wiatr w żagle i szkoda tego nie pociągnąć dalej! Do Speccy Party 2020.1 jeszcze 10 miesięcy, więc jest szansa że do tego czasu stworzysz swoją produkcję
