No i kolejna wersja z konwersją i wyświetlaniem danych/wyników również w hex (w sumie niewielkie zmiany do poprzedniej wersji). Zająłem się pisaniem i nie widziałem, że coś napisaliście po Blukim (fajne uproszczenie poprzez wrzucenie wag do danych). Teraz zerkam i ukrycie linii jak pisałem zrobiłem pod oknem tekstowym, ale wychodzi przy zmianie GRAPHICS. Później doczytam jak to jest u was... Tu wyniki są wyświetlane w kolejności tak jak mamy wybór: bin, hex, dec (pytanie jest jednocześnie opisem). W pierwszej kolumnie wyniki, w drugiej dane wejściowe.
100 DIM S$(1),H1$(2),H2$(2),HA$(2),HO$(2),HX$(2),A$(8),B$(8),OA$(8),OO$(8),OX$(8)
105 GRAPHICS 8:E=PEEK(88)+256*PEEK(89):AD=ADR(A$):YS=191:E=E+40*YS
110 ? "(B)IN, (H)EX, DEC ";:INPUT S$:ON (S$="B")*1+(S$="H")*2 GOTO 125,135
115 TRAP 115:? "0-255 (A) ";:INPUT IA:POKE E,IA
120 TRAP 120:? "0-255 (B) ";:INPUT IB:POKE E+1,IB:TRAP 0:GOTO 155
125 ? "0-11111111 (A) ";:INPUT A$:POKE E,0:POSITION 8-LEN(A$),YS:? #6;A$
130 ? "0-11111111 (B) ";:INPUT B$:POKE E+1,0:POSITION 8+8-LEN(B$),YS:? #6;B$:GOTO 155
135 ? "0-FF (A) ";:INPUT H1$:? "0-FF (B) ";:INPUT H2$
140 FOR X=7 TO 10:A=AD-X:B=PEEK(A):IF B>64 AND B<71 THEN POKE A,B-7
145 NEXT X:GRAPHICS 9+32:POKE E,0:POSITION 2-LEN(H1$),YS:? #6;H1$
150 POKE E+1,0:POSITION 2+2-LEN(H2$),YS:? #6;H2$:GRAPHICS 8+32
155 IA=PEEK(E):IB=PEEK(E+1):A$(8)="#":B$=A$:OA$=A$:OO$=A$:OX$=A$:H1$(2)="#":H2$=H1$:HA$=H1$:HO$=H1$:HX$=H1$
160 FOR X=0 TO 7
170 LOCATE X,YS,A:POKE AD+X,A+48:LOCATE X+8,YS,B:POKE AD+X+8,B+48
180 OA=A AND B:POKE AD+X+16,OA+48:REM COLOR OA:PLOT X+16,YS
190 OO=A OR B:POKE AD+X+24,OO+48:REM COLOR OO:PLOT X+24,YS
200 OX=OO AND NOT OA:POKE AD+X+32,OX+48:REM COLOR OX:PLOT X+32,YS
210 NEXT X:POSITION 0+16,YS:? #6;OA$;OO$;OX$
215 GRAPHICS 9+32:FOR X=0 TO 9:LOCATE X,YS,A:POKE AD-10+X,A+48+(A>9)*7:NEXT X:GRAPHICS 8+32:? CHR$(125);
220 OA=PEEK(E+2):? "AND:";OA$;" ";HA$;" ";OA;CHR$(127);A$;" ";H1$;" ";IA
230 OO=PEEK(E+3):? "OR: ";OO$;" ";HO$;" ";OO;CHR$(127);B$;" ";H2$;" ";IB
240 OX=PEEK(E+4):? "XOR:";OX$;" ";HX$;" ";OX
250 GOTO 110
Edit: Forum zamienia duże "B" w nawiasie kwadratowym występujące w kodzie na małe "b", podobnie z "H"->"h", więc zmieniam nawias na okrągły - linia 110.
Edit2: Ukrywania danych za oknem tekstowym użyłem w mojej wersji Computer Inhabitant - tam w tym obszarze ukryte są dane animacji przedmiotów i elementów domu ;) Więc tu mi to od razu przyszło do głowy. Wybrałem linię 191, bo jest to ostatnia lina ekranu, gdzie bardziej prawdopodobne, że nic tam nie umieścimy, jeszcze lepiej byłoby przenieść dane na koniec tej linii. Można też przed konwersją zrobić backup tego co tam się znajduje, a po skończonym 'liczeniu' przywrócić.
Do DL pochodzę jak do jeża, ale być może ostatnią lub inną wybraną linię da się ukryć. Jeden minus, że pewnie trzeba będzie użyć kilku instrukcji assemblera, których unikamy w tej metodzie.
@Mono nie rozumiem, dlaczego najpierw robisz POKE, a na końcu po ustawieniu koloru, PEEK? OK, chyba rozumiem, to taki niepełny przykład abstrakcja - brakuje PLOTa :)
EXOR pierwotnie zrobiłem wg wzoru z Wikipedii, czy czegoś podobnego, jednak wydawał mi się zbyt długi i poszukałem krótszego :)
@Maw a czy próbowałeś zmienić GRAPHICS na NR+32, to znaczy z zachowaniem zawartości ekranu? Ja użyłem tego powyżej wraz z Twoim sposobem konwersji - do konwersji hex - zmiana na GR.9+32 4 bity na pixel, i z powrotem na GR.8+32 1 bit na pixel.
Edit3: Zastanawia mnie czy można użyć #6 do czegoś innego niż PRINT? Wpisanie INPUT #6,A$ powoduje dłuższe jakby zawieszenie i ERROR - 141? Czyżby dało się w ten sposób odczytać ciąg Bajtów? Spróbuję umieścić bajt 155 na ekranie i zobaczyć czy uda się odczytać kilka Bajtów... Gdyby to działało można by w ten sposób odczytać kilka zmiennych jednocześnie... i np. przekopiować dane...
Edit4: Działa GR. 8 i POS.X,Y:PUT#6,1-A:POS.X,Y:GET#6,A:?A;
PUT i GET zapala/gasi i odczytuje bit (piksel). W GR.8 nie ma chyba możliwości aby INPUT #6,A$ odczytało koniec linii?
Edit5: Wygląda na to, że INPUT #6,A$ czyta dane z całego ekranu od miejsca wskazanego przez POS.X,Y. Tylko jak ten odczyt zakończyć? Może gdyby ustawić TRAP i wtedy... no właśnie co? Niestety zmienna A$ pozostaje niezmieniona (obecne dane pozostają bez zmian). Nieważne też jak długa jest ta zmienna odczyt i tak dochodzi do końca ekranu.