[#1] BootBlock, odczytanie tekstu z dyskietki i wyświetlenie
Potrzebuję napisać program, jak najmniejszy, ma on odczytać sektor z dyskietki i wyświetlić jako tekst.
Da się coś takiego zmieścić w bootblocku dyskietki?
Jest jakaś biblioteka w kickstarcie z gotowym fontem, tak żeby nie trzeba było dawać własnego?
[#2] Re: BootBlock, odczytanie tekstu z dyskietki i wyświetlenie

@piotr_go, post #1

jest topaz (ten od guru mediation) . nie upchniesz tez tekstu w bootsektorze? masz 2kb :)
[#3] Re: BootBlock, odczytanie tekstu z dyskietki i wyświetlenie

@piotr_go, post #1

Właśnie wczoraj kodowałem w tym kierunku ;) Problem jest z biblioteką "dos.library", która w czasie wykonywania bootbloku nie jest jeszcze dostępna. Można ją zainstalować, ale z jej funkcji (np. wyświetlającej tekst w CLI startowym) mogą korzystać tylko procesy, a kod bootbloku nie jest procesem. Trzeba by stworzyć więc jakiś dodatkowy proces, żeby korzystać z "dos.library". Jest o tym wątek: link. Oczywiście mam tu na myśli wyświetlanie tekstu w CLI startowym.

Ostatnia aktualizacja: 27.03.2017 20:33:50 przez RomanWorkshop
[#4] Re: BootBlock, odczytanie tekstu z dyskietki i wyświetlenie

@juen, post #2

A nie 1kB ? Dla tylu jest liczone CRC z tego co się zdążyłem zorientować.
Tekst musi być w innej ścieżce, będzie generowany na żywo emulatorem stacji dyskietek.
Chcę zrobić proste menu.

Mam do dyspozycji maks 5.5KB ale wolał bym się zmieścić w bootblocku.
Jak prosto wyświetlić fonta z kicka?
Coś w stylu X,Y,Kolor,Text na wejściu polecenia XXXXX. (2 kolory wystarczą, tło i font)

Aaaa, soft w asmie.
[#5] Re: BootBlock, odczytanie tekstu z dyskietki i wyświetlenie

@piotr_go, post #4

Ile dokładnie jest różnych znaków (spacja to też znak ) które zamierzasz wyświetlić ?
[#6] Re: BootBlock, odczytanie tekstu z dyskietki i wyświetlenie

@asman, post #5

0x20...0x7F
[#7] Re: BootBlock, odczytanie tekstu z dyskietki i wyświetlenie

@piotr_go, post #4

tak wybacz, masz 2x512b

nalezy otworzyc ekran i na nim wyswietlic tekst, bron boze zadne CLI. bibliotek mozna jak najbardziej uzywac

do menu to jeszcze jakis input rozumiem? czy menu na zasadzie 1 z 2?
[#8] Re: BootBlock, odczytanie tekstu z dyskietki i wyświetlenie

@piotr_go, post #1

Najprościej użyć trackdisk.device do czytania sektorów dyskietki, bez problemu zmieścisz w bootblock (1024b).
[#9] Re: BootBlock, odczytanie tekstu z dyskietki i wyświetlenie

@juen, post #7

up/down/enter
wybór jednego z listy
[#10] Re: BootBlock, odczytanie tekstu z dyskietki i wyświetlenie

@piotr_go, post #9

ilość pozycji menu zmieści się na ekranie 320x256, przy założeniu że font ma wysokość 8 pikseli ?

Ostatnia aktualizacja: 27.03.2017 21:47:46 przez asman
[#11] Re: BootBlock, odczytanie tekstu z dyskietki i wyświetlenie

@asman, post #10

Menu będzie musiało być przewijane.
Wczytanie nazw plików z jednego lub więcej sektorów do bufora i wyświetlanie tylko części.
Pojedynczy sektor będzie zawierał 16 wpisów (powiedzmy 28B nazwy + 4B nr)


Odnośnie trackdisk.device
move.l $4.w,a6 ; not really required as a6 = execbase at boot :)
move.l #LOADADDRESS,$28(a1)
move.l #LENGTH,$24(a1)
move.l #OFFSET,$2c(a1)
jsr -456(a6)

Tyle tylko trzeba co w tym przykładzie czy coś jeszcze?
[#12] Re: BootBlock, odczytanie tekstu z dyskietki i wyświetlenie

@piotr_go, post #11

pierwszy rozkaz można wywalić, bo w a6 mam execbase na starcie a w a1 masz io req dla trackdisk.device. Nie wiem czy nie trzeba ustawić jeszcze io_Command na CMD_READ.
[#13] Re: BootBlock, odczytanie tekstu z dyskietki i wyświetlenie

@asman, post #12

Minimalny BootBlock, który coś wczyta i działa na 1.3/3.1 to taki:

;	----	----	Boot Block, struct from: include/devices/bootblock.h -----
	dc.b	'DOS',0					; bb_id = BBID_DOS
	dc.l	0					; bb_chksum
	dc.l	880					; bb_dosblock = 880, DOS block on track 40

;	----	----	minimal BootBlock code (8-bytes), loads next 2 sectors in the same place
	addq.b	#2, $002E(a1)			; WW	; IORequest.io_Offset	$0400, just after Boot Block
	jsr	exec_DoIO(a6)			; WW	; EXEC.library		DoIO(a1 = struct IORequest *)


Ostatnia aktualizacja: 28.03.2017 07:05:36 przez makarsky
[#14] Re: BootBlock, odczytanie tekstu z dyskietki i wyświetlenie

@makarsky, post #13

jeśli ma coś pisać, to mniej więcej tak:
;	----	writes text
TEXT_run:	
	lea		gfx_libname(pc),a1		; name
	jsr		exec_OldOpenLibrary(a6)
	move.l		d0,a6				; graphics.library base to A6

	lea		TEXT_rastport-CURT_copper(a4),a1; RastPort ptr
	jsr		gfx_InitRastPort(a6)
	
	lea		TEXT_bitmap-CURT_copper(a4),a0	; BitMap ptr	
	moveq		#1,d0				; depth
	move.l		#640,d1				; width
	move.l		#50,d2				; height = 5 lines of text with line spacing
	jsr		gfx_InitBitMap(a6)

	move.l		a0,4(a1)			; RastPort.Bitmap pointer
	lea		TEXT_bitplane-CURT_copper(a4),a2; Bitplane ptr
	move.l		a2,8(a0)
	
	moveq		#4,d7				; no of text lines -1
	move.w		#6,d1				; y=6, minimal y pos due to font baseline
	lea		BB_text(pc),a0			; string ptr
;	lea		TEXT_rastport-CURT_copper(a4),a1
TEXT_loop:	
	movem.l		d0-a6,-(a7)			; due to gfx_Text regs overwritting
	moveq		#0,d0				; x
	jsr		gfx_Move(a6)	
		
	moveq		#62,d0				; string len
	jsr		gfx_Text(a6)
	
	movem.l		(a7)+,d0-a6
	lea		64(a0),a0			; ptr to next line of text
	add.w		#10,d1				; dy
	dbf		d7,TEXT_loop
[#15] Re: BootBlock, odczytanie tekstu z dyskietki i wyświetlenie

@makarsky, post #13

dc.b	"DOS",0		;DOS disk identifier
	dc.l	0		;room for bootblock chksum
	dc.l	$880		;room for rootblock pointer

	add.l	#$400,$28(a1)
	move.l	#$1200,$24(a1)
	move.l	#$400,$2c(a1)
	jsr	-456(a6)

loop1:
	bra	loop1


uae + kick1.3 daje czerwone guru
Jeżeli wczytuje pod jakiś wyższy adres (0x10000) to jest ok.
Można wczytywać pod adres zaraz po bootblocku?
[#16] Re: BootBlock, odczytanie tekstu z dyskietki i wyświetlenie

@piotr_go, post #15

Zależy pod jakim adresem został wczytany booblock.
Niektórzy robią prostego reloka, czyli zwyczajnie kopiują kod i dane bootblocka do adresu na przykład $7f000 i po kopiowaniu skaczą tam. Oczywiście kod musi być pc-relative by zrobić taki relok. Oczywiście można poprosić exec.library o przydzielenie bloku pamięci (AllocMem) ale to wszystko swoje bajty kosztuje.

Ach, dopiero przeanalizowałem Twój kawałek kodu, musiałbyś sprawdzić jaki jest adres pod $28(a1), bo dodajesz tam $400. Jeśli adres jest niepoprawny to stąd guru.

Ostatnia aktualizacja: 28.03.2017 16:51:51 przez asman
[#17] Re: BootBlock, odczytanie tekstu z dyskietki i wyświetlenie

@asman, post #16

Adres jest poprawny, odczytanie danych z pod niego daje "DOS,0....."

Zrobiłem wczytywanie pod 0x10000 + skok, na razie działa.
Tekst też mam bez biblioteki, jak się skończy miejsce to będę się martwił.

Muszę teraz pokombinować nad jakimś timerem do odczytu klawiatury bo mi menu przeskakuje kilka pozycji.
[#18] Re: BootBlock, odczytanie tekstu z dyskietki i wyświetlenie

@asman, post #16

Oczywiście można poprosić exec.library o przydzielenie bloku pamięci (AllocMem) ale to wszystko swoje bajty kosztuje.


Fuj, nieladnie tak brac sobie pamiec i nawet systemu o to nie pytac. A wszystko z powodu marnych kilkunastu straconych bajtow... Takimi "hard-core" "optymalizacjami" zaczalbym sie martwic dopiero jak miejsca zacznie brakowac, a nie juz teraz.
[#19] Re: BootBlock, odczytanie tekstu z dyskietki i wyświetlenie

@piotr_go, post #15

uae + kick1.3 daje czerwone guru


Zapewne nadpisujesz SysBase ktore moze byc ulokowane dosc nisko...

Można wczytywać pod adres zaraz po bootblocku?


Nie. Mozna wczytywac pod adres zwrocony przez AllocMem...
[#20] Re: BootBlock, odczytanie tekstu z dyskietki i wyświetlenie

@piotr_go, post #17

Adres jest poprawny, odczytanie danych z pod niego daje "DOS,0....."


Ach, ADD #$400. Przez takie wczytywanie mogles uszkodzic liste wolnych blokow pamieci (struct MemChunk). Kolejny AllocMem moze uwalic system, wywalic guru lub zrobic cokolwiek innego i nieprzewidywalnego.

Ostatnia aktualizacja: 28.03.2017 19:14:08 przez mschulz
[#21] Re: BootBlock, odczytanie tekstu z dyskietki i wyświetlenie

@mschulz, post #20

Krótkie pytanie do znawców, nie koniecznie na temat: czy da się wyświetlić tekst w CLI startowym z poziomu bootbloku?
[#22] Re: BootBlock, odczytanie tekstu z dyskietki i wyświetlenie

@piotr_go, post #15

O wyliczeniu sumy kontrolnej pamiętałeś?
W io_Length i io_Offset muszą być wielokrotności rozmiaru sektora.
W io_Data parzysty adres pamięci.

Za dużo wczytujesz w miejsce za BootBlokiem, pewnie coś tam siedzi - sprawdź monitorem w UAE. Najlepiej przydzielić sobie pamięć i tam wczytywać dane, lub oldskoolowo na 100% pewny wyższy adres jeśli nie będziesz potem bootować do DOS-u.
[#23] Re: BootBlock, odczytanie tekstu z dyskietki i wyświetlenie

@makarsky, post #22

CRC wyliczone, napisałem programik który konwertuje binarkę do ADFa.
Rozmiar i offset są wielokrotnością 512. Adres zaokrąglam do 8.
Podejrzewam że zaraz za bootblockiem siedzi bufor mfm i stąd te problemy.
Zrobiłem alokację, 128k, powinno wystarczyć na soft + bufory.

Dotychczasowe wypociny:
http://cloud.pcdeb.pl/s/wSAKR29hbnQorH0
[#24] Re: BootBlock, odczytanie tekstu z dyskietki i wyświetlenie

@piotr_go, post #1

Trochę info o trackdisk.device

link
[#25] Re: BootBlock, odczytanie tekstu z dyskietki i wyświetlenie

@piotr_go, post #23

Nie wiem o co chodzi, widzę tylko ciemny niebieski ekran.
[#26] Re: BootBlock, odczytanie tekstu z dyskietki i wyświetlenie

@makarsky, post #25

Powinno być "menu" z napisami.
Jeżeli jest tylko niebieski ekran to znaczy że sektor z napisami nie wczytał się jako pierwszy (tak będzie przy emulatorze który robię).
Na UAE wczytuje się na szczęście jako pierwszy.
[#27] Re: BootBlock, odczytanie tekstu z dyskietki i wyświetlenie

@piotr_go, post #26

w WinUAE sprawdzałem: na 2.8 nie działa, ale na 3.3 działa.

Ostatnia aktualizacja: 29.03.2017 14:49:32 przez makarsky
[#28] Re: BootBlock, odczytanie tekstu z dyskietki i wyświetlenie

@makarsky, post #27

DF0? UAE(chyba 2.6.2) model a600, kick1.3, wszystko na AUTO i wartości domyślne. Joystick wyłączony.

Ostatnia aktualizacja: 29.03.2017 14:52:28 przez piotr_go
[#29] Re: BootBlock, odczytanie tekstu z dyskietki i wyświetlenie

@piotr_go, post #26

Na androidzie (euae) działa tylko na kick. 2.1.
Na pozostałych jest niebieski ekran
[#30] Re: BootBlock, odczytanie tekstu z dyskietki i wyświetlenie

@piotr_go, post #28

Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem