DIAG6 $D #  ( dz@ < vdu(N) F D,D$,B,byte,item,lbyte P item=1 N Z D$ dD$,1)="@" B=2 B=1 n D=(D$) x2(D$)>64 [OPT PASS:LDA D:JSR OSWRCH:]:t`@  D<0 D=((D) &FFFF)+1 byte=D 256:form  B=2 byte=D 256:form item   form ) byte<>lbyte [OPT PASS:LDA #byte:] [OPT PASS:JSR OSWRCH:] lbyte=byte  OSWRCH=&FFEE:OSBYTE=&FFF4  SCR=&70  START 1000  PASS=0 3 3 " P%=START , 6 @ J vdu(29) Td 22,2,18,0,132,16,18,0,3,25,4,500@,500@,25,1,200@,0@,25,81,0@,-200@,25,1,-200@,0@,25,81,0@,200@ ^ h [OPT PASS r&.BEGIN \ start at screen pos &3000 | LDA #&00  STA SCR  LDA #&06  STA SCR+1  .SCROLL  LDA #&13 JSR OSBYTE  LDA #&0D  STA &FE00  LDA SCR  STA &FE01  LDA #&0C  STA &FE00  LDA SCR+1  STA &FE01 CLC  LDA#&51 & STA&77 0 JSRadd :LDA&78:STA SCR DLDA&79:STA SCR+1 N\ (78/79) and (SCR/SCR+1) O*\ point to the start of scr mem vJSR shuffle JMP SCROLL \ \ \ .add  LDA SCR+1:STA&79:LDA SCR:CLC  ADC&77  STA&78 BCC addret LDA SCR+1:CLC:ADC#&01 CMP#&10:BNE addend  LDA#&06 .addend:STA&79 .addret:RTS .sub  LDA SCR+1:STA&79:LDA SCR:SEC SBC&77:STA&78 BCS subret LDA SCR+1:SEC:SBC#&01 CMP#&5:BNE subend  LDA#&0F  .subend:STA&79:.subret:RTS  \  \  \ z6.shuffle \ assumes current screen addr is in 78/79 JSR getaddr JSR storetop ALDX #&1F \ copy loop starts with 2nd and ends before the last  .copyloop +LDA&78:STA&88:LDA&79:STA&89:JSR incaddr  LDY#&07  .move  LDA(&78),Y  STA(&88),Y  DEY  BPL move DEX BNE copyloop RTS JSR incaddr:JSR retrtop RTS \ \ \ :.getaddr:ASL&78:ROL&79:ASL&78:ROL&79:ASL&78:ROL&79:RTS g.incaddr:CLC:LDA&78:ADC#&80:STA&78:LDA&79:ADC#&02:CMP#&80:BMI incret:SEC:SBC#&50:.incret:STA&79:RTS \ .storetop:LDY#&07  .loopst LDA(&78),Y  STA&60,Y DEY BPL loopst RTS .retrtop:LDY#&07  .looprt  LDA&60,Y STA(&78),Y DEY BPL looprt  RTS:]  PASS  tSS   ;" ";~?&79;~?&78  &78  ?&78  ~?&78  &78   &78  ~?&78  &78  &78  ?&78  ?&78  &78  &78  ?&78  ?&78   ;~?&78  ;~?&78    "SWRCH