LOGIN   :::   RECOVER PASS   :::   GET ACCOUNT    
Browse
  • Projects
  • Code (CVS)
  • Forums
  • News
  • Articles
  • Polls
  •  
    OpenCores
  • FAQ
  • CVS HowTo
  • Mission
  • Media
  • Tools
  • Sponsors
  • Mirrors
  • Logos
  • Contact us
  •  
    Tools
  • Search
      
  • Download Cores (CVSGet)
  •  
    More
  • Wishbone
  • Perlilog
  • EDA tools
  • OpenTech CD
  •  
    Navigation: All forums > Cvs-checkins > Message List > Message Post

    Message

    Reply | Reply all
    Date Prev | Date Next | Thread Prev | Thread Next Date Index | Thread Index

    From: cvs at opencores.org<cvs@o...>
    Date: Sat May 24 20:17:47 CEST 2008
    Subject: [cvs-checkins] MODIFIED: z80soc ...
    Top
    Date: 00/08/05 24:20:17

    Added: z80soc/S3E/rom SoC_S3E.z8a
    Log:
    Version 0.6


    Revision Changes Path
    1.1 z80soc/S3E/rom/SoC_S3E.z8a

    http://www.opencores.org/cvsweb.shtml/z80soc/S3E/rom/SoC_S3E.z8a?rev=1.1&content-type=text/x-cvsweb-markup

    Index: SoC_S3E.z8a
    ===================================================================
    ld sp,(7FDEh) ; Put Stack on top of memory
    inicio:
    ld a,(7FDDH)
    or a
    jr z,inic1

    call set_lcd ; Is Z80soc-s3e
    inic1:
    call clear
    ld de,4034h
    ld hl,Text1
    call printmsg
    ld de,405Ch
    ld hl,Text2
    call printmsg
    call Border
    ld de,4146h
    ld hl,Text3
    call printmsg
    ld de,4196h
    ld hl,Text4
    call printmsg
    ld de,41E6h
    ld hl,Text5
    call printmsg
    ld de,4236h
    ld hl,Text6
    call printmsg
    ld de,425Eh
    ld hl,Text7
    call printmsg
    ; check soz version
    ld hl,DE1_Version
    ld a,(7FDDH)
    or a
    jr z,print_v
    ld hl,S3E_Version
    print_v:
    ld de,4087h
    call printmsg
    setprint:
    ld de,42D6h
    ld bc,30
    loopprint:
    push bc
    push de
    call delay
    call rotate
    ld a,(7FDDH) ; get z80soc version
    or a
    jr z,looppr2
    call s3e_routine ; Is Z80-S3E
    looppr2:
    call read_kbd
    pop de
    pop bc
    or a
    jr z,loopprint
    cp 41h
    jr z,go_on
    out (01H),a
    ld l,a
    ld a,(7FDDh) ; get z80soc version
    or a
    jr nz,looppr3
    ld a,l
    out (11h),a ; Use HEX display if DE1
    looppr3:
    ld (de),a
    inc de
    dec bc
    ld a,b
    or c
    jr z,setprint
    jr loopprint
    go_on:
    ld hl,8000h ; RAM Address
    ld a,0 ; Value to store in memory
    loop1:
    ld (hl),a ; Store A into Memory (HL)
    inc hl ; Point to next memory location
    inc a ; Add 1 to value to store in memory
    jr nz,loop1 ; If A not equal 0 continue loop1
    ; When A=FFh, and we make A=A+1 ...
    ; A becomes 100h
    ; But, A is an 8 bits register, and
    ; can only store the two last hex digits,
    ; that is, 8 bits.
    call read_key0 ; Wait until KEY0 is pressed ; ld hl,8000h ; Get back the start RAM address loop2: ld a,(7FDDh) ; get z80soc version or a jr nz,skip2_de1 ld a,h out (11h),a ld a,l out (10h),a skip2_de1: ld a,(hl) ; Read back the values stored in loop1 out (01h),a ; Send to Green Leds call delay ; Call sub-routine to delay some time inc hl ; Add 1 to the memory location ld a,(hl) ; Read the value in the memory cp 0FFh ; check if equal 255 jr nz,skip2_de1 ; If not equal 255, continue loop2 ; end of First execution call read_key0 ; Wait until KEY0 is pressed jP inicio ; Restart program read_key0: loop3: call delay in a,(30h) ; Read KEYs (all 4 KEYs) cp 1 ; check if returns "00001110" jr nz,loop3 ; KEY0 not pressed, continue checking ret iodelay: in a,(20h) ; Read SW(7-0) or a jr nz,loop4 ld a,1 ; Read the number of times to loop loop4: dec a ; Start counting backwards jr nz,loop4 ; If A greather than 0, continue loop ret ; return to calling program delay: in a,(20h) ; Read SW(7-0) or a jr nz,loop5 ld a,1 loop5: push af ld bc,5000 ; Every delay has at least 255 loops loop6: dec bc ; Start counting backwards ld a,b or c jr nz,loop6 ; If A greather than 0, continue loop pop af ; Get multiplier back dec a ; jr nz,loop5 ret ; return to calling program clear: ld a,0 out (91h),a ; video cursor x = 0 out (92h),a ; video cursor y = 0 ld bc,1200 clean_loop: ld a,20h out (90h),a ; print character to video ; cursor x,y is automatically updated ; by hardware dec bc ld a,b or c jr nz,clean_loop ret printmsg: ploop: ld a,(hl) or a ret z ld (de),a inc hl inc de jr ploop read_kbd: in a,(80h) ret Border: ld hl,Lineu ld de,40F5H call printmsg ld de,411DH ld a,10 brdloop: ld hl,Column push hl push af push de call printmsg pop de pop af ld hl,40 add hl,de ld d,h ld e,l pop hl dec a jr nz,brdloop ld hl,Lined call printmsg ret rotate: ; save first line of box ld hl,411Eh ld de,9000h ld bc,30 ldir ; move all lines up ld hl,4146h ; this is second line of box ld de,411Eh ; this is first line of box ld b,9 loop_rotate: push bc push hl push de ld bc,30 ldir pop de ld hl,40 add hl,de ld d,h ld e,l pop hl ld bc,40 add hl,bc pop bc djnz loop_rotate ; now get back the first line saved in 9000h ; and put on the last line of box ld hl,9000h ld bc,30 ldir ret s3e_routine: push bc push de ; print message in LCD display ; Check of Rotary Knob is moving call read_rot ; Is it rotating to the right ? cp 1 jr nz,check_left call roll_lcd_right ld a,1 jr printlcd check_left: ; Is it rotating to the left? cp 2 jr nz,dec_jump call roll_lcd_left ld a,128 printlcd: out (01h),a ld de,7FE0h ld hl,9100h call printmsg dec_jump: pop de pop bc ret set_lcd: ld de,9100h ld hl,lcdtxt ld bc,33 ldir ld de,7FE0h ld hl,9100h ld bc,32 ldir ret read_rot: CALL DELAY_MULT LD A,0 RET NZ IN A,(70H) RET DELAY_ROT: LD A,(9000H) DEC A LD (9000H),A RET DELAY_MULT: LD A,(9001H) DEC A JR NZ,DLY_M1 LD A,10H DLY_M1: LD (9001H),A RET roll_lcd_left: ; save the first char on the left, for every line ld a,(9100h) ld (9002H),a ld a,(9110h) ld (9003H),a ld HL,9101H ld de,9100h ld bc,31 ldir ld a,(9002h) ld (910Fh),a ld a,(9003h) ld (911Fh),a ret roll_lcd_right: ; save the first char on the left, for every line ld a,(910Fh) ld (9002H),a ld a,(911Fh) ld (9003H),a ld HL,911EH ld de,911Fh ld bc,31 lddr ld a,(9002h) ld (9100h),a ld a,(9003h) ld (9110h),a ret Text1: db "Z80 SYSTEM ON CHIP" db 0 Text2: db "RONIVON COSTA 2008" db 0 Text3: db " |!#$%&/()=?*`+´ç~^,.;:\<>" db 0 Text4: db " ABCDEFGHIJKLMNOPQRSTUVWXYZ" db 0 Text5: db " abcdefghijklmnopqrstuvwxyz" db 0 Text6: db " 0123456789" db 0 Text7: db 2,3,4,11,12,13,14,18,24,25,26,27,232,233,235,187,188,138,134,135,129,128,1,6,7,8,9,10,29,31 db 0 Lineu: db 201,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,187 db 0 Lined: db 200,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,188 db 0 Column: db 186 db " " db 186 db 0 lcdtxt: db " Z80 SYSTEM " db " RONIVON COSTA " db 0 DE1_Version: db "DE1 Version" db 0 S3E_Version: db "S3E Version" db 0

     
    Copyright (c) 1999 OPENCORES.ORG. All rights reserved.