.pic 그림 불러오기
pic-loader.bas
설명
.pic 파일을 512바이트씩 읽어 허큘리스 화면 메모리(B000)에 POKE합니다.
첫 블록은 "AH" 머리와 7번 바이트가 7인지 확인합니다.
- 표지 바이트가
80h이면 다음 블록을 읽습니다. - 위 비트가 0이면 뒤따르는 n바이트를 그대로 씁니다.
- 위 비트가 1이면 다음 바이트를 n번 반복합니다.
그 바이트가 0이면 쓰지 않고 n바이트를 건너뜁니다.
어떤 프로그램이 만든 형식인지는 남아 있지 않습니다.
웹 그림판의 .pic 저장은 이 코드를 거꾸로 만든 것입니다.
소스
CLEAR : SCREEN 0: CLSINPUT "File name(.pic)"; filename$DIM buffer(511)DEF SEG = &HB000OPEN filename$ + ".pic" FOR BINARY AS #1MemCount = 0Plane = 0Count = 10SCREEN 3: CLSChangePlane:FOR getdata = 0 TO 511buffer(getdata) = ASC(INPUT$(1, #1))NEXT getdataIF Count = 10 THENIF (buffer(0) <> &H41) OR (buffer(1) <> &H48) THEN GOTO quitIF buffer(7) <> 7 THEN GOTO quitEND IFLoopStart:flag = buffer(Count)Count = Count + 1SELECT CASE flagCASE &H80Count = 0GOTO ChangePlaneCASE 0GOTO quitCASE ELSESELECT CASE (flag AND &H80)CASE 0FOR loop1 = 1 TO (flag AND &H7F)POKE MemCount, buffer(Count)Count = Count + 1MemCount = MemCount + 1NEXT loop1CASE &H80Dummy = buffer(Count)IF Dummy <> 0 THENFOR loop1 = 1 TO (flag AND &H7F)POKE MemCount, DummyMemCount = MemCount + 1NEXT loop1ELSEMemCount = MemCount + (flag AND &H7F)END IFCount = Count + 1END SELECTEND SELECTGOTO LoopStartquit:CLOSE : DEF SEGPLAY "o1 c20 e20 g20"WHILE INKEY$ = "": WENDSCREEN 0END